{"id":495,"name":"pydantic","ecosystem":"pip","repository_url":"https://github.com/pydantic/pydantic","issues_count":9111,"created_at":"2025-06-06T15:01:34.861Z","updated_at":"2025-06-06T15:01:34.861Z","purl":"pkg:pypi/pydantic","metadata":{"id":2868884,"name":"pydantic","ecosystem":"pypi","description":"Data validation using Python type hints","homepage":"https://github.com/pydantic/pydantic","licenses":"MIT License","normalized_licenses":["MIT"],"repository_url":"https://github.com/pydantic/pydantic","keywords_array":[],"namespace":null,"versions_count":177,"first_release_published_at":"2017-05-03T20:58:46.000Z","latest_release_published_at":"2025-05-22T21:18:06.000Z","latest_release_number":"2.11.5","last_synced_at":"2025-06-06T00:35:07.618Z","created_at":"2022-04-10T12:11:30.678Z","updated_at":"2025-06-06T00:35:07.618Z","registry_url":"https://pypi.org/project/pydantic/","install_command":"pip install pydantic --index-url https://pypi.org/simple","documentation_url":"https://docs.pydantic.dev","metadata":{"funding":"https://github.com/sponsors/samuelcolvin","documentation":"https://docs.pydantic.dev","classifiers":["Development Status :: 5 - Production/Stable","Framework :: Hypothesis","Framework :: Pydantic","Intended Audience :: Developers","Intended Audience :: Information Technology","License :: OSI Approved :: MIT License","Operating System :: OS Independent","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.9","Programming Language :: Python :: Implementation :: CPython","Programming Language :: Python :: Implementation :: PyPy","Topic :: Internet","Topic :: Software Development :: Libraries :: Python Modules"],"normalized_name":"pydantic"},"repo_metadata":{"id":37266968,"uuid":"90194616","full_name":"pydantic/pydantic","owner":"pydantic","description":"Data validation using Python type hints","archived":false,"fork":false,"pushed_at":"2025-05-26T07:31:38.000Z","size":246554,"stargazers_count":23973,"open_issues_count":465,"forks_count":2125,"subscribers_count":133,"default_branch":"main","last_synced_at":"2025-05-27T00:02:17.436Z","etag":null,"topics":["hints","json-schema","parsing","pydantic","python","python310","python311","python312","python313","python39","validation"],"latest_commit_sha":null,"homepage":"https://docs.pydantic.dev","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/pydantic.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.md","contributing":"docs/contributing.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"samuelcolvin"}},"created_at":"2017-05-03T21:23:58.000Z","updated_at":"2025-05-26T22:17:03.000Z","dependencies_parsed_at":"2024-01-17T05:02:29.247Z","dependency_job_id":"428b9e8f-a439-4ce1-8679-3547aeb2a766","html_url":"https://github.com/pydantic/pydantic","commit_stats":{"total_commits":3261,"total_committers":597,"mean_commits":"5.4623115577889445","dds":0.8298068077276909,"last_synced_commit":"e7f75aee3f219398bf293399c569b66fda845a2a"},"previous_names":["samuelcolvin/pydantic"],"tags_count":178,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pydantic","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":257525120,"owners_count":22559213,"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":"pydantic","name":"Pydantic","uuid":"110818415","kind":"organization","description":"Pydantic, Pydantic Logfire and PydanticAI","email":"hello@pydantic.dev","website":"https://pydantic.dev","location":"United Kingdom","twitter":"pydantic","company":null,"icon_url":"https://avatars.githubusercontent.com/u/110818415?v=4","repositories_count":38,"last_synced_at":"2025-05-29T00:39:57.605Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/pydantic","funding_links":["https://github.com/sponsors/pydantic"],"total_stars":50200,"followers":1713,"following":0,"created_at":"2022-11-02T16:26:18.052Z","updated_at":"2025-05-29T00:39:57.605Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pydantic","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pydantic/repositories"},"tags":[{"name":"v2.11.5","sha":"5e6d1dc71fe9bd832635cb2e9b4af92286fd00b8","kind":"tag","published_at":"2025-05-22T20:54:33.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.11.5","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.11.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.5/manifests"},{"name":"v2.11.4","sha":"d444cd1cf6c5af54b23a335aff2ea45eaac2c2f6","kind":"tag","published_at":"2025-04-29T20:23:09.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.11.4","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.11.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.4/manifests"},{"name":"v1.10.22","sha":"5e6e87f7da283d8d13965d0186c88acdd531eda9","kind":"tag","published_at":"2025-04-17T17:17:13.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.22","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.22","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.22","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.22/manifests"},{"name":"v2.11.3","sha":"876bf76f34f9ab313923a3428a4d4aaf00144f43","kind":"tag","published_at":"2025-04-08T13:16:13.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.11.3","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.11.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.3/manifests"},{"name":"v2.11.2","sha":"bd1f8cf44a271e7313026faab318f3c37f23b3f4","kind":"tag","published_at":"2025-04-03T12:57:34.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.11.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.11.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.2/manifests"},{"name":"v2.11.1","sha":"6c38dc93f40a47f4d1350adca9ec0d72502e223f","kind":"tag","published_at":"2025-03-28T20:57:51.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.11.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.11.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.1/manifests"},{"name":"v2.11.0","sha":"58e61fa3c60ffb8140d01ca9f74ff7528326a0c6","kind":"tag","published_at":"2025-03-27T17:43:38.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.11.0","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.0/manifests"},{"name":"v2.11.0b2","sha":"d76d942e5fe2ddabf60f58a89b24709277a9feb8","kind":"tag","published_at":"2025-03-17T16:16:20.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.11.0b2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.11.0b2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.0b2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.0b2/manifests"},{"name":"v2.11.0b1","sha":"bff747748e57c0db384dbd0df886fa623fa3a703","kind":"commit","published_at":"2025-03-06T16:18:19.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.11.0b1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.11.0b1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.0b1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.0b1/manifests"},{"name":"v2.11.0a2","sha":"a1f12c710c99d13f64becf696bf18ce49c5ea07c","kind":"commit","published_at":"2025-02-10T11:28:59.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.11.0a2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.11.0a2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.0a2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.0a2/manifests"},{"name":"v2.11.0a1","sha":"5e368925f607d47c4d98a709b170ea13615b05f2","kind":"tag","published_at":"2025-01-30T18:33:36.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.11.0a1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.11.0a1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.0a1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.11.0a1/manifests"},{"name":"v2.10.6","sha":"df05e69a8a3fb37628a0e3a33518ca0425334bc9","kind":"commit","published_at":"2025-01-24T01:29:00.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.10.6","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.10.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.6/manifests"},{"name":"v1.10.21","sha":"0cbba0f9774c470e8d8a2a62abb921b8cea4027d","kind":"tag","published_at":"2025-01-10T19:07:37.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.21","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.21","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.21","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.21/manifests"},{"name":"v2.10.5","sha":"5d34efda82895b8697649e20616aea385d769eaf","kind":"tag","published_at":"2025-01-08T21:15:54.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.10.5","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.10.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.5/manifests"},{"name":"v1.10.20","sha":"bfc2243a440478fa71ffbe155a3af2feae1a2179","kind":"tag","published_at":"2025-01-07T19:02:48.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.20","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.20","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.20","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.20/manifests"},{"name":"v2.10.4","sha":"5bd3a6507b749fcd4833173fba88b3690ff77170","kind":"commit","published_at":"2024-12-18T16:56:15.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.10.4","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.10.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.4/manifests"},{"name":"v2.10.3","sha":"c326748b0119f12e284c280825d4ab6d3576643c","kind":"commit","published_at":"2024-12-03T15:42:19.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.10.3","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.10.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.3/manifests"},{"name":"v2.10.2","sha":"fe325154987b41345b356e5eb6d1584d7278bb0d","kind":"commit","published_at":"2024-11-26T12:36:18.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.10.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.10.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.2/manifests"},{"name":"v2.10.1","sha":"17e60fafd66133be47352cb0a9b887664b5a6f2d","kind":"commit","published_at":"2024-11-22T00:46:43.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.10.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.10.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.1/manifests"},{"name":"v2.10.0","sha":"910bc54b6d5c05e4eabb4a9076def9e7ed23d38a","kind":"commit","published_at":"2024-11-20T20:30:09.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.10.0","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.0/manifests"},{"name":"v2.10.0b2","sha":"6e917073728aea8dbd5ea4f6a4205de8a0787f04","kind":"commit","published_at":"2024-11-13T20:00:26.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.10.0b2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.10.0b2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.0b2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.0b2/manifests"},{"name":"v2.10.0b1","sha":"a25e0286de98ff6f011cdbea264952eba5a86dc3","kind":"commit","published_at":"2024-11-06T19:33:54.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.10.0b1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.10.0b1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.0b1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.10.0b1/manifests"},{"name":"v1.10.19","sha":"bb18ac56ddb4360c9dd054879e934aac27215dfa","kind":"commit","published_at":"2024-11-06T15:50:33.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.19","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.19","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.19","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.19/manifests"},{"name":"v2.9.2","sha":"7cedbfb03df82ac55c844c97e6f975359cb51bb9","kind":"commit","published_at":"2024-09-17T14:50:42.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.9.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.9.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.9.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.9.2/manifests"},{"name":"v2.9.1","sha":"ecc5275d01e3d8de15c3641d35eb5151f5778833","kind":"commit","published_at":"2024-09-09T08:21:41.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.9.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.9.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.9.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.9.1/manifests"},{"name":"v2.9.0","sha":"ed92d0a921d3464f08c5aa67dcbd262bf67110b1","kind":"commit","published_at":"2024-09-05T15:34:44.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.9.0","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.9.0/manifests"},{"name":"v2.9.0b2","sha":"acdd32f4de78b2170678fd0a1d3063c577f8dcab","kind":"commit","published_at":"2024-08-31T01:25:37.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.9.0b2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.9.0b2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.9.0b2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.9.0b2/manifests"},{"name":"v2.9.0b1","sha":"714c0df09f48cd24579dd2b1c744d9b5da4f2911","kind":"commit","published_at":"2024-08-26T16:40:52.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.9.0b1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.9.0b1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.9.0b1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.9.0b1/manifests"},{"name":"v1.10.18","sha":"5ebcdc13b83fba5da34ad9b0f008f7b4faf89396","kind":"commit","published_at":"2024-08-22T17:51:06.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.18","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.18","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.18","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.18/manifests"},{"name":"v2.8.2","sha":"4978ee235bf5f0fa11159b2dfe46068ef3deba0a","kind":"commit","published_at":"2024-07-04T02:40:44.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.8.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.8.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.8.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.8.2/manifests"},{"name":"v2.8.1","sha":"040865f3b8b9b201282826f92f552efa238b1f2e","kind":"commit","published_at":"2024-07-03T22:57:31.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.8.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.8.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.8.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.8.1/manifests"},{"name":"v2.8.0","sha":"1609e2ada1cd74a6d6afdc34e27c5f81d402928b","kind":"commit","published_at":"2024-07-01T15:43:05.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.8.0","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.8.0/manifests"},{"name":"v2.8.0b1","sha":"764e14881de27183b3ccfcc4b2dbbe0594000b5f","kind":"commit","published_at":"2024-06-27T14:13:39.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.8.0b1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.8.0b1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.8.0b1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.8.0b1/manifests"},{"name":"v1.10.17","sha":"b9b8eb76c4f37ed5b33e136aea6d4b80ffa673c8","kind":"commit","published_at":"2024-06-20T13:52:29.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.17","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.17","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.17","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.17/manifests"},{"name":"v2.7.4","sha":"1ab655a54c0defdc5a2a9b13bc90feb6fba78719","kind":"commit","published_at":"2024-06-12T13:44:13.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.7.4","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.7.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.7.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.7.4/manifests"},{"name":"v1.10.16","sha":"211910eccce116f0f25964e81c09e87fd98a351c","kind":"commit","published_at":"2024-06-11T18:53:00.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.16","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.16","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.16","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.16/manifests"},{"name":"v2.7.3","sha":"9f48fc28db791ad15e389c3c0bf7dcbdd81dd0eb","kind":"commit","published_at":"2024-06-03T18:32:51.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.7.3","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.7.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.7.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.7.3/manifests"},{"name":"v2.7.2","sha":"70ac7a085ce5379e97bea10b61812204cb4ac344","kind":"commit","published_at":"2024-05-28T17:58:51.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.7.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.7.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.7.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.7.2/manifests"},{"name":"v2.7.1","sha":"26129479a06960af9d02d3a948e51985fe59ed4b","kind":"commit","published_at":"2024-04-23T12:59:19.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.7.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.7.1/manifests"},{"name":"v2.7.0","sha":"7af856a1098406aea84bcadfd0f3de6b7901526c","kind":"commit","published_at":"2024-04-11T16:26:32.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.7.0","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.7.0/manifests"},{"name":"v2.7.0b1","sha":"d294244e2d7d8d395de503203d8924f937bb4f4d","kind":"commit","published_at":"2024-04-03T18:17:55.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.7.0b1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.7.0b1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.7.0b1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.7.0b1/manifests"},{"name":"v1.10.15","sha":"5476a758c8ac59887dbfa3aa1c3481d0a0e20837","kind":"commit","published_at":"2024-04-03T12:38:40.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.15","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.15","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.15","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.15/manifests"},{"name":"v2.6.4","sha":"6214a4bc472bfc4cd72232ab5d407dc640dc64aa","kind":"commit","published_at":"2024-03-08T15:20:55.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.6.4","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.6.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.6.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.6.4/manifests"},{"name":"v2.6.3","sha":"88451f3a09f6cc34e66fcb78f0e76755fc6a89bc","kind":"commit","published_at":"2024-02-27T18:09:57.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.6.3","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.6.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.6.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.6.3/manifests"},{"name":"v2.6.2","sha":"511d862ec9895de6999d260ac4c790d0b233e316","kind":"commit","published_at":"2024-02-23T16:00:30.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.6.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.6.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.6.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.6.2/manifests"},{"name":"v2.6.1","sha":"cf822bd7eef30b2027a6869be2a69b5b22a8ec3b","kind":"commit","published_at":"2024-02-05T13:39:17.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.6.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.6.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.6.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.6.1/manifests"},{"name":"v2.6.0","sha":"3257fa32eb5a017ae61f030089ecb90c2b4824f2","kind":"commit","published_at":"2024-01-25T13:40:30.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.6.0","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.6.0/manifests"},{"name":"v2.6.0b1","sha":"e131d53a07da080c2ba642775efa9e81cb2cf0ba","kind":"commit","published_at":"2024-01-19T16:56:19.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.6.0b1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.6.0b1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.6.0b1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.6.0b1/manifests"},{"name":"v1.10.14","sha":"3ddb509786089f9df0658303545ae4b66db2d47c","kind":"commit","published_at":"2024-01-19T15:29:06.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.14","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.14","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.14","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.14/manifests"},{"name":"v2.5.3","sha":"9f58e785a5f1f2c34437f6e9b6adcd5b969e0df4","kind":"commit","published_at":"2023-12-22T10:03:11.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.5.3","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.5.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.5.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.5.3/manifests"},{"name":"v2.5.2","sha":"b75cb28e64a57c5656574f244ec4eb59e656dc75","kind":"commit","published_at":"2023-11-22T13:24:03.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.5.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.5.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.5.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.5.2/manifests"},{"name":"v2.5.1","sha":"4982d57cc72c46abb9cbb781d2e38cdf86095a90","kind":"commit","published_at":"2023-11-15T13:30:40.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.5.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.5.1/manifests"},{"name":"v2.5.0","sha":"d465ec5542a611ffefab45736859f37b0b251eb8","kind":"commit","published_at":"2023-11-13T16:26:10.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.5.0","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.5.0/manifests"},{"name":"v2.5.0b1","sha":"9eec4d64d8883950b993a46d5296af5b916a43cb","kind":"commit","published_at":"2023-11-09T16:15:18.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.5.0b1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.5.0b1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.5.0b1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.5.0b1/manifests"},{"name":"v2.4.2","sha":"d1634da7d9cce1f91ae6f76bd3379b776b7de6da","kind":"commit","published_at":"2023-09-27T17:36:22.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.4.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.4.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.4.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.4.2/manifests"},{"name":"v1.10.13","sha":"8822578619bf8d0bb754b1cf7a2a905b50240d01","kind":"commit","published_at":"2023-09-27T16:38:55.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.13","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.13","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.13","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.13/manifests"},{"name":"v2.4.1","sha":"07b23ef2502e935e4b35f015e5d3b2f3c9b37c07","kind":"commit","published_at":"2023-09-26T14:09:35.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.4.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.4.1/manifests"},{"name":"v2.4.0","sha":"1f59075c69e7172f8019b0cf621f0d9fde406307","kind":"commit","published_at":"2023-09-25T13:48:57.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.4.0","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.4.0/manifests"},{"name":"v2.3.0","sha":"7f1a643c5c03d6deffc9868008eaae169ede6e93","kind":"commit","published_at":"2023-08-23T18:42:07.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.3.0","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.3.0/manifests"},{"name":"v2.2.2","sha":"5fb914b73a3fe5ad9b33fd2a82cbaf57378a2eb0","kind":"commit","published_at":"2023-08-23T18:25:00.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.2.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.2.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.2.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.2.2/manifests"},{"name":"v2.2.1","sha":"5a1fdfad1f1e5108c11c76a451f9a0e671bef8e7","kind":"commit","published_at":"2023-08-18T16:11:01.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.2.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.2.1/manifests"},{"name":"v2.2.0","sha":"d5a42210e70516b4b0984db3faf94367e7c08425","kind":"commit","published_at":"2023-08-17T11:27:50.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.2.0","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.2.0/manifests"},{"name":"v2.1.1","sha":"cfd5b6c780a137c5e2394361db2ed93ba4ff368e","kind":"commit","published_at":"2023-07-25T22:56:25.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.1.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.1.1/manifests"},{"name":"v2.1.0","sha":"3284a249794efc30ec1935a0095671263a175c4e","kind":"commit","published_at":"2023-07-25T16:31:30.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.1.0","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.1.0/manifests"},{"name":"v1.10.12","sha":"d9c2af3a701ca982945a590de1a1da98b3fb4003","kind":"commit","published_at":"2023-07-24T19:43:46.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.12","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.12","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.12","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.12/manifests"},{"name":"v2.0.3","sha":"d5d9dfc2c92e9e5969903b32e18c7f5c812d2874","kind":"commit","published_at":"2023-07-13T23:38:34.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.0.3","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0.3/manifests"},{"name":"v2.0.2","sha":"00dc93f33a10253f53bcec1c8dd5f4292fe0d731","kind":"commit","published_at":"2023-07-05T17:02:03.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.0.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0.2/manifests"},{"name":"v2.0.1","sha":"53b13626e1dbb3b0d408715a70a89373afbe42c2","kind":"commit","published_at":"2023-07-04T17:12:41.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.0.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0.1/manifests"},{"name":"v1.10.11","sha":"15c82d978d9e3b3893f00982b9e0c5c8d5c7821d","kind":"commit","published_at":"2023-07-04T15:31:49.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.11","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.11","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.11","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.11/manifests"},{"name":"v2.0","sha":"aeb8fd0255bf034212e808b92893283adc9f8d3a","kind":"tag","published_at":"2023-06-30T16:16:43.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.0","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0/manifests"},{"name":"v1.10.10","sha":"0e8a387d6752dd859676da53298601ccae6a23a7","kind":"commit","published_at":"2023-06-30T10:18:15.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.10","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.10","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.10/manifests"},{"name":"v2.0b3","sha":"3e8b3b00e413cf737cb33dd60d15e69c6fd6b427","kind":"commit","published_at":"2023-06-16T23:33:37.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.0b3","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.0b3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0b3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0b3/manifests"},{"name":"v1.10.9","sha":"90326480ff1061f690aa193bd112cd17a6d90a70","kind":"commit","published_at":"2023-06-07T15:51:36.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.9","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.9/manifests"},{"name":"v2.0b2","sha":"815fcf2bb3b9795e43cf31d58f7f6e38d8b5f47e","kind":"commit","published_at":"2023-06-03T05:37:24.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.0b2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.0b2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0b2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0b2/manifests"},{"name":"v2.0b1","sha":"9d3b1f3786d1fd2189f99db1b7dbf2040b020110","kind":"commit","published_at":"2023-06-01T19:38:37.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.0b1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.0b1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0b1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0b1/manifests"},{"name":"v1.10.8","sha":"77e3ac776c3dc71f09ce7a1f734d9cad035a8c0f","kind":"commit","published_at":"2023-05-23T17:13:55.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.8","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.8/manifests"},{"name":"v2.0a4","sha":"f1fbdb1a9b52ad152306b68dec8e5ec98c7c9188","kind":"commit","published_at":"2023-05-05T22:38:55.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.0a4","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.0a4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0a4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0a4/manifests"},{"name":"v2.0a3","sha":"415b3ef6676a0259ce4ff65ec6440b968c779f5a","kind":"commit","published_at":"2023-04-20T16:46:48.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.0a3","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.0a3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0a3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0a3/manifests"},{"name":"v2.0a2","sha":"bda373de2b7422cf08f97fead59f92f5dbde18e2","kind":"commit","published_at":"2023-04-12T17:13:56.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.0a2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.0a2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0a2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0a2/manifests"},{"name":"v2.0a1","sha":"00040f782805e9be07d8f2d8ac141c971befbf8c","kind":"tag","published_at":"2023-04-03T20:38:17.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v2.0a1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v2.0a1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0a1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v2.0a1/manifests"},{"name":"v1.10.7","sha":"11f7f9019016659e81c96481ffe5c42637489cf3","kind":"commit","published_at":"2023-03-22T19:29:23.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.7","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.7/manifests"},{"name":"v1.10.6","sha":"bf6b884563e7c635b9d811e97d2fdb51805398b1","kind":"commit","published_at":"2023-03-08T19:27:19.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.6","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.6/manifests"},{"name":"v1.10.5","sha":"b0215d175ace2a3db76307c5f18819b021f48ab5","kind":"commit","published_at":"2023-02-15T17:37:21.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.5","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.5/manifests"},{"name":"v1.10.4","sha":"63c683d9fc7b494bf81e964f97ec2f9b78b8e09d","kind":"commit","published_at":"2022-12-30T09:53:51.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.4","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.4/manifests"},{"name":"v1.10.3","sha":"0a9e000db7bc13b76b728d82df53a3e4c24b43f4","kind":"commit","published_at":"2022-12-29T11:25:31.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.3","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.3/manifests"},{"name":"v1.10.2","sha":"bc74342b39e2b1d0115364cf2aa90d8f874cb9b5","kind":"commit","published_at":"2022-09-05T16:35:13.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.2/manifests"},{"name":"v1.10.1","sha":"32ea8853450b50e5b963ce677ab1fff95bc2e56a","kind":"commit","published_at":"2022-08-31T09:57:25.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.1/manifests"},{"name":"v1.10.0","sha":"64f24726d18db191e6677f2976c076778fdc2364","kind":"commit","published_at":"2022-08-30T15:51:46.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.0","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.0/manifests"},{"name":"v1.10.0b1","sha":"f8575aa3793c565cf006979c60ad62312406d5b5","kind":"commit","published_at":"2022-08-24T19:14:26.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.0b1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.0b1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.0b1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.0b1/manifests"},{"name":"v1.10.0a2","sha":"934adc1d850b89ae9cb36affbaa0ec826dbf9213","kind":"commit","published_at":"2022-08-24T11:28:43.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.0a2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.0a2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.0a2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.0a2/manifests"},{"name":"v1.10.0a1","sha":"f1df0896f9323c87bdec3ae6a7108d4b01c1c21c","kind":"tag","published_at":"2022-08-22T20:30:15.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10.0a1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10.0a1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.0a1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10.0a1/manifests"},{"name":"v1.10a1","sha":"f1df0896f9323c87bdec3ae6a7108d4b01c1c21c","kind":"commit","published_at":"2022-08-22T16:21:17.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.10a1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.10a1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10a1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.10a1/manifests"},{"name":"v1.9.2","sha":"1d37ffd89c9e6607db2553eb830fea2fc028dc2f","kind":"commit","published_at":"2022-08-11T10:18:25.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.9.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.9.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.9.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.9.2/manifests"},{"name":"v1.9.1","sha":"a5edcb35d57a543143b0dc127dbcf8e143c38e6d","kind":"commit","published_at":"2022-05-19T10:33:13.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.9.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.9.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.9.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.9.1/manifests"},{"name":"v1.9.0","sha":"fbf8002cefd1ba7b263f63545fff2e48a378189d","kind":"commit","published_at":"2021-12-31T15:02:06.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.9.0","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.9.0/manifests"},{"name":"v1.9.0a2","sha":"ef4678999f94625819ebad61b44ea264479aeb0a","kind":"commit","published_at":"2021-12-24T14:07:08.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.9.0a2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.9.0a2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.9.0a2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.9.0a2/manifests"},{"name":"v1.9.0a1","sha":"5de27ca465e3a75fb26924084c8b5df211bb0e83","kind":"commit","published_at":"2021-12-18T21:18:37.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.9.0a1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.9.0a1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.9.0a1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.9.0a1/manifests"},{"name":"v1.8.2","sha":"a84cfacf9caf08bef8edca076c3325c3cf49475d","kind":"commit","published_at":"2021-05-11T19:27:18.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.8.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.8.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.8.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.8.2/manifests"},{"name":"v1.7.4","sha":"e3d1c161d79d54e0e2d549f96e7b458d74088205","kind":"commit","published_at":"2021-05-11T19:04:58.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.7.4","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.7.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.7.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.7.4/manifests"},{"name":"v1.6.2","sha":"acf778345d516a78d93c08459ab4cd4c6709a6be","kind":"commit","published_at":"2021-05-11T19:04:30.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.6.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.6.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.6.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.6.2/manifests"},{"name":"v1.8.1","sha":"619ff261c9bdc2a612ef2fcfa17a005dfefbcf21","kind":"commit","published_at":"2021-03-03T17:03:59.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.8.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.8.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.8.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.8.1/manifests"},{"name":"v1.8","sha":"a8d50aef0c375374302d050fbe16703d33aaeb86","kind":"commit","published_at":"2021-02-26T16:38:26.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.8","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.8/manifests"},{"name":"v1.7.3","sha":"00a128a3609dac82dfe0cdb4200bbf2011aa5f83","kind":"commit","published_at":"2020-11-30T23:33:24.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.7.3","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.7.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.7.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.7.3/manifests"},{"name":"v1.7.2","sha":"685303237273eb21f379227b721295e0bf7e253b","kind":"commit","published_at":"2020-11-01T15:30:36.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.7.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.7.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.7.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.7.2/manifests"},{"name":"v1.7.1","sha":"8dcc87cf422c8344ca565c8ee23b7119bc100949","kind":"commit","published_at":"2020-10-28T19:26:46.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.7.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.7.1/manifests"},{"name":"v1.7","sha":"95435de4526b609ee904b7a27478cec2e32f8fe8","kind":"commit","published_at":"2020-10-26T11:31:10.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.7","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.7/manifests"},{"name":"v1.6.1","sha":"d2b050176eec04c187d0835be4039ef9509d56be","kind":"commit","published_at":"2020-07-15T19:24:20.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.6.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.6.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.6.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.6.1/manifests"},{"name":"v1.6","sha":"5dbb1272f6a51363d2c21044f4048868879fda25","kind":"commit","published_at":"2020-07-11T12:00:53.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.6","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.6/manifests"},{"name":"v1.5.1","sha":"f96c4dc59f9544fef72c2a30b07281ddf8e14676","kind":"commit","published_at":"2020-04-23T12:43:34.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.5.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.5.1/manifests"},{"name":"v1.5","sha":"1f071f1cf9c315d502633880aeec8dfb4ef9bcd9","kind":"commit","published_at":"2020-04-18T17:08:28.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.5","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.5/manifests"},{"name":"v1.4","sha":"e4cd9d2c87b0e6f42366b617de6441f8cd561085","kind":"commit","published_at":"2020-01-24T10:48:44.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.4","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.4/manifests"},{"name":"v1.3","sha":"e65d11240a6febcd569ad44a61e2374eb00b9ba6","kind":"commit","published_at":"2019-12-21T15:52:37.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.3","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.3/manifests"},{"name":"v1.2","sha":"b521f6b24aa48ca65044d3a5a693ad44d929307d","kind":"commit","published_at":"2019-11-28T17:46:43.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.2/manifests"},{"name":"v1.1.1","sha":"1fd89f59b9eb7ab07a4d889b22d9655cf4b5e5fb","kind":"commit","published_at":"2019-11-20T16:19:53.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.1.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.1.1/manifests"},{"name":"v1.1","sha":"8a261c1dfa1136f3c2aa1fb1b43b8b25882e6c2e","kind":"commit","published_at":"2019-11-07T15:20:27.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.1/manifests"},{"name":"v1.0","sha":"b8bbfec670019e96530680a4b79551afc6e122ec","kind":"commit","published_at":"2019-10-23T10:48:14.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.0","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.0/manifests"},{"name":"v1.0b2","sha":"4762f49b3615d7f5fac2ac1d4a7ec5acfc7ce314","kind":"commit","published_at":"2019-10-07T17:46:37.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.0b2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.0b2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.0b2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.0b2/manifests"},{"name":"v1.0b1","sha":"8dabb34390a11bc424941fea194a3c524e1402b6","kind":"commit","published_at":"2019-10-01T16:41:33.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v1.0b1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v1.0b1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.0b1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v1.0b1/manifests"},{"name":"v0.32.2","sha":"dbe9514e0df1bea1a8ce9df8defd8f170a633116","kind":"commit","published_at":"2019-08-17T19:03:47.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.32.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.32.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.32.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.32.2/manifests"},{"name":"v0.32.1","sha":"dd1755f63e055ffd653fc7ee2de5d5a50bb9cbd7","kind":"commit","published_at":"2019-08-08T11:04:38.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.32.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.32.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.32.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.32.1/manifests"},{"name":"v0.32","sha":"10c18ee63d61fd960f27cf0321bfb053e877f8c9","kind":"commit","published_at":"2019-08-06T14:42:49.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.32","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.32","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.32","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.32/manifests"},{"name":"v0.31.1","sha":"719501c68b36e82c7527bdce42326a16ae0d7a68","kind":"commit","published_at":"2019-07-31T11:06:08.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.31.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.31.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.31.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.31.1/manifests"},{"name":"v0.31","sha":"c28d469f5ba95b13114a148cf3b47f58857dfeb0","kind":"commit","published_at":"2019-07-24T17:49:13.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.31","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.31","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.31","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.31/manifests"},{"name":"v0.30.1","sha":"7244aba55382c36d239c8cb53af65aa0b44c9701","kind":"commit","published_at":"2019-07-15T18:28:36.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.30.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.30.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.30.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.30.1/manifests"},{"name":"v0.30","sha":"b52d877f28d993e454785873d44bd449b76b826d","kind":"commit","published_at":"2019-07-07T10:13:02.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.30","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.30","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.30","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.30/manifests"},{"name":"v0.29","sha":"dd44fda8a6f6eed961cd03ad1e70049e523cdb40","kind":"commit","published_at":"2019-06-19T10:28:14.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.29","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.29","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.29","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.29/manifests"},{"name":"v0.28","sha":"f5b054b9fc5c5a476584a35f14e20e24af94294a","kind":"commit","published_at":"2019-06-11T06:59:01.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.28","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.28","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.28","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.28/manifests"},{"name":"v0.27","sha":"d69ca21ce468644cf40b99ea62b70dc8ef2f3fa9","kind":"commit","published_at":"2019-05-30T15:15:55.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.27","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.27","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.27","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.27/manifests"},{"name":"v0.27a1","sha":"0dca636ce5fa1adffee06776bfde2b3ce75ce262","kind":"commit","published_at":"2019-05-26T12:14:05.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.27a1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.27a1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.27a1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.27a1/manifests"},{"name":"v0.26","sha":"d2f60737211d1b9f99b6abba661da93581b87c42","kind":"commit","published_at":"2019-05-22T13:06:22.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.26","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.26","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.26","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.26/manifests"},{"name":"v0.25","sha":"6d80a1a65e29bc25e76934673e242cdd8a7f1d86","kind":"commit","published_at":"2019-05-05T13:09:53.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.25","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.25","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.25","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.25/manifests"},{"name":"v0.24","sha":"94c27b6334776ce1d7e8e7dae0b2c8dcb13f247d","kind":"commit","published_at":"2019-04-23T14:11:18.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.24","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.24","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.24","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.24/manifests"},{"name":"v0.23","sha":"ddbf2be9c9d198a0ae66f7fc80a2cd6addd4ba1f","kind":"commit","published_at":"2019-04-04T11:55:28.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.23","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.23","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.23","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.23/manifests"},{"name":"v0.22","sha":"46b1e89a65a50ae31e3f793ac590050f3383ac51","kind":"commit","published_at":"2019-03-29T10:19:20.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.22","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.22","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.22","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.22/manifests"},{"name":"v0.21","sha":"f81aa969aeae892bbcd4a708b1351a47d0d87220","kind":"commit","published_at":"2019-03-15T12:23:02.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.21","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.21","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.21","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.21/manifests"},{"name":"v0.20.1","sha":"7b126a7af63903a76d5da393e6420ce7552aecc0","kind":"commit","published_at":"2019-02-26T09:21:00.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.20.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.20.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.20.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.20.1/manifests"},{"name":"v0.20","sha":"7cd423aa3e763352b0d87c7fe1fce41f417807fe","kind":"commit","published_at":"2019-02-18T08:44:26.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.20","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.20","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.20","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.20/manifests"},{"name":"v0.20a1","sha":"f9bc56a70a1a7a587a305c1c94a94287f9a4406c","kind":"commit","published_at":"2019-02-13T15:47:28.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.20a1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.20a1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.20a1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.20a1/manifests"},{"name":"v0.19","sha":"8fa1382beb4f64e95befd32df304484c82cd5e2a","kind":"commit","published_at":"2019-02-04T22:09:51.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.19","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.19","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.19","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.19/manifests"},{"name":"v0.18.2","sha":"06b0c41276ebb3a280894b3c92eee0947d4cdc36","kind":"commit","published_at":"2019-01-22T18:34:28.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.18.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.18.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.18.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.18.2/manifests"},{"name":"v0.18.1","sha":"8cb3557aec9569539176ebba960e2ef9bc076a9c","kind":"commit","published_at":"2019-01-17T20:59:58.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.18.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.18.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.18.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.18.1/manifests"},{"name":"v0.18","sha":"0c1482aabae3f152ab172c94528146bcfff6f5e5","kind":"commit","published_at":"2019-01-13T09:12:44.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.18","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.18","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.18","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.18/manifests"},{"name":"V0.17","sha":"c2bae0a05d3965609c474bf0bd4a525eb517de1e","kind":"commit","published_at":"2018-12-27T20:44:02.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/V0.17","html_url":"https://github.com/pydantic/pydantic/releases/tag/V0.17","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/V0.17","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/V0.17/manifests"},{"name":"v0.16.1","sha":"1f270dd84a0923f9ad0a343b4732d404f32a4423","kind":"commit","published_at":"2018-12-10T10:00:21.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.16.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.16.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.16.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.16.1/manifests"},{"name":"v0.16","sha":"86949c2ba20469776c0679796885f1c60f2a4df4","kind":"commit","published_at":"2018-12-03T12:45:45.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.16","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.16","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.16","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.16/manifests"},{"name":"v0.15","sha":"19ec7c60db420fee9085c04ac310bbf44f85333b","kind":"commit","published_at":"2018-11-18T16:25:01.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.15","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.15","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.15","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.15/manifests"},{"name":"v0.14","sha":"50898658571487563fdbe7982a194b9675d53311","kind":"commit","published_at":"2018-10-02T16:36:41.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.14","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.14","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.14","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.14/manifests"},{"name":"v0.13.1","sha":"0a6c211d7fd90f62e80503b6971c6ebe4ccdab22","kind":"commit","published_at":"2018-09-21T09:39:09.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.13.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.13.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.13.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.13.1/manifests"},{"name":"v0.13","sha":"08396467887e911bf890cb936209a730fc582fce","kind":"commit","published_at":"2018-08-25T16:15:22.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.13","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.13","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.13","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.13/manifests"},{"name":"v0.12.1","sha":"16eebf0c61588aced4f16059d3ae9a633c2cfdf4","kind":"commit","published_at":"2018-07-31T18:44:37.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.12.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.12.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.12.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.12.1/manifests"},{"name":"v0.12","sha":"86da135a0573b1627c9fa5f81750dcb7e3be2af7","kind":"commit","published_at":"2018-07-31T13:00:14.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.12","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.12","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.12","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.12/manifests"},{"name":"v0.11.2","sha":"725b3c3bcf13af1cabab1e35ddf2f979cf1874fb","kind":"commit","published_at":"2018-07-05T13:48:47.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.11.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.11.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.11.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.11.2/manifests"},{"name":"v0.11.1","sha":"f2190c4b24d09f7b2b40518efc859ada48dd21cc","kind":"commit","published_at":"2018-07-02T17:08:29.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.11.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.11.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.11.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.11.1/manifests"},{"name":"v0.11","sha":"37364a05b9580a776e64d0b8bc015dc7ed9db17f","kind":"commit","published_at":"2018-06-28T17:21:45.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.11","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.11","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.11","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.11/manifests"},{"name":"v0.10","sha":"7e44bcaf7a029b035fe03ebcb42fa65f975cead9","kind":"commit","published_at":"2018-06-11T12:11:45.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.10","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.10","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.10/manifests"},{"name":"v0.9.1","sha":"9061cb20ba9ccabe367dbba2a603c0a2b43419ca","kind":"commit","published_at":"2018-05-10T15:05:39.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.9.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.9.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.9.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.9.1/manifests"},{"name":"v0.9","sha":"36a20613fb313c3cbfd3ab4ef66d84c453df296f","kind":"commit","published_at":"2018-04-28T18:37:35.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.9","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.9/manifests"},{"name":"v0.8","sha":"2966beeb4039b28d85f6bc1ac23d8c5c5eada13e","kind":"commit","published_at":"2018-03-25T17:24:40.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.8","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.8/manifests"},{"name":"v0.7.1","sha":"03838d92206789cb84af96fbb0cb11f677095224","kind":"commit","published_at":"2018-02-07T17:32:20.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.7.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.7.1/manifests"},{"name":"v0.7","sha":"89201f08b0f1cbed6959e3dbf769b867ab29b16c","kind":"commit","published_at":"2018-02-06T19:32:30.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.7","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.7/manifests"},{"name":"v0.6.4","sha":"423137cefe091b63166bb0a4531fef8b9c4eaf0a","kind":"commit","published_at":"2018-02-01T17:20:06.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.6.4","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.6.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.6.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.6.4/manifests"},{"name":"v0.6.3","sha":"bf80464f286d6c87e2b273ad1d95982a90b02109","kind":"commit","published_at":"2017-11-26T16:27:15.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.6.3","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.6.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.6.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.6.3/manifests"},{"name":"v0.6.2","sha":"f6c94e611e66ba6a12715ac1e4ce0fc5b35471e8","kind":"commit","published_at":"2017-11-13T15:32:50.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.6.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.6.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.6.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.6.2/manifests"},{"name":"v0.6.1","sha":"acf3128dcd45198c0b54e642497c6585af9faf10","kind":"commit","published_at":"2017-11-08T14:37:01.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.6.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.6.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.6.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.6.1/manifests"},{"name":"v0.6","sha":"050dbb191ba37937670a3577b6128eaea07d9906","kind":"commit","published_at":"2017-11-07T13:31:23.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.6","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.6/manifests"},{"name":"v0.5","sha":"42e2c068965d964e4c27c5ce605ec38aabd6a1f2","kind":"commit","published_at":"2017-10-23T19:07:58.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.5","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.5/manifests"},{"name":"v0.4","sha":"29508d49726feac1bb255a78691559e9a76015e7","kind":"commit","published_at":"2017-07-08T18:11:15.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.4","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.4/manifests"},{"name":"v0.3","sha":"94c2fe553b1f6d8c5aa2ebb6b114df4cd7deea90","kind":"commit","published_at":"2017-06-21T17:22:37.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.3","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.3/manifests"},{"name":"v0.2.1","sha":"678e6595bf89d981d5dd681b0ccb88299c0c94c0","kind":"commit","published_at":"2017-06-07T22:39:41.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.2.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.2.1/manifests"},{"name":"v0.2","sha":"56662690c728a973dad6d270ae0bebb923cf2592","kind":"commit","published_at":"2017-06-07T22:08:34.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.2/manifests"},{"name":"v0.1","sha":"3627bad7687d5ec0cf0c972c00cbcc6b743168d0","kind":"commit","published_at":"2017-06-03T16:45:49.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.1","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.1/manifests"},{"name":"v0.0.8","sha":"ea88afb212fd7eededf82c93a227554ca3c989be","kind":"commit","published_at":"2017-05-31T12:41:53.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.0.8","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.0.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.0.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.0.8/manifests"},{"name":"v0.0.7","sha":"9ecae91dade6ccf1a9a008a96bf71ca9b94d3faf","kind":"commit","published_at":"2017-05-31T11:07:29.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.0.7","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.0.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.0.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.0.7/manifests"},{"name":"v0.0.6","sha":"9cceb76ca053bea9d6b542f5680cf4dbd60d0546","kind":"commit","published_at":"2017-05-23T16:10:22.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.0.6","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.0.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.0.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.0.6/manifests"},{"name":"v0.0.5","sha":"90a2b6bfe37da8883aa25360bc916450cd9dbc72","kind":"commit","published_at":"2017-05-11T21:19:11.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.0.5","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.0.5/manifests"},{"name":"v0.0.4","sha":"35add310cce8bf8b9bab6e4fb8357eafd634b920","kind":"commit","published_at":"2017-05-10T11:43:29.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.0.4","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.0.4/manifests"},{"name":"v0.0.3","sha":"2c43b0caf027c952bd4620b2da1bfde2962bb61c","kind":"commit","published_at":"2017-05-09T15:46:32.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.0.3","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.0.3/manifests"},{"name":"v0.0.2","sha":"5710649cb0b3cb50b2d6d9acdc281979cde7de0e","kind":"commit","published_at":"2017-05-06T14:48:58.000Z","download_url":"https://codeload.github.com/pydantic/pydantic/tar.gz/v0.0.2","html_url":"https://github.com/pydantic/pydantic/releases/tag/v0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydantic%2Fpydantic/tags/v0.0.2/manifests"}]},"repo_metadata_updated_at":"2025-06-03T00:27:30.967Z","dependent_packages_count":9821,"downloads":351059501,"downloads_period":"last-month","dependent_repos_count":49355,"rankings":{"downloads":0.00641958008609574,"dependent_repos_count":0.027879319231044357,"dependent_packages_count":0.0027512486083267453,"stargazers_count":0.2846625226748739,"forks_count":1.404604122837748,"docker_downloads_count":0.019625573406064117,"average":0.29099039447402547},"purl":"pkg:pypi/pydantic","advisories":[{"uuid":"GSA_kwCzR0hTQS1tcjgyLThqODMtdnhtds4AA6-j","url":"https://github.com/advisories/GHSA-mr82-8j83-vxmv","title":"Pydantic regular expression denial of service","description":"Regular expression denial of service in Pydantic \u003c 2.4.0, \u003c 1.10.13 allows remote attackers to cause denial of service via a crafted email string.","origin":"UNSPECIFIED","severity":"MODERATE","published_at":"2024-04-15T03:31:00.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":5.9,"cvss_vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H","references":["https://nvd.nist.gov/vuln/detail/CVE-2024-3772","https://github.com/pydantic/pydantic/pull/7360","https://github.com/pydantic/pydantic/commit/59d8f38fd6220e3917c53785dbc70317d6f8e631","https://github.com/pydantic/pydantic/commit/e4393ae6145c4dadff739990bb0116c6dec3441b","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/6JBZLMSH4GAZOVBMT2JUO2LXHY7M2ALI","https://github.com/advisories/GHSA-mr82-8j83-vxmv"],"source_kind":"github","identifiers":["GHSA-mr82-8j83-vxmv","CVE-2024-3772"],"repository_url":"https://github.com/pydantic/pydantic","blast_radius":27.69065382183972,"packages":[{"versions":[{"first_patched_version":"1.10.13","vulnerable_version_range":"\u003c 1.10.13"},{"first_patched_version":"2.4.0","vulnerable_version_range":"\u003e= 2.0.0, \u003c 2.4.0"}],"ecosystem":"pypi","package_name":"pydantic"}],"created_at":"2024-04-25T06:05:08.349Z","updated_at":"2025-02-13T19:01:05.000Z","epss_percentage":0.00043,"epss_percentile":0.11641},{"uuid":"MDE2OlNlY3VyaXR5QWR2aXNvcnlHSFNBLTVqcXAtcWdmNi0zcHZo","url":"https://github.com/advisories/GHSA-5jqp-qgf6-3pvh","title":"Use of \"infinity\" as an input to datetime and date fields causes infinite loop in pydantic","description":"\nImpact\n\nPassing either 'infinity', 'inf' or float('inf') (or their negatives) to datetime or date fields causes validation to run forever with 100% CPU usage (on one CPU).\nPatches\n\nPydantic is be patched with fixes available in the following versions:\n\n    v1.8.2\n    v1.7.4\n    v1.6.2\n\nAll these versions are available on pypi, and will be available on conda-forge soon.\n\nSee the changelog for details.\nWorkarounds\n\nIf you absolutely can't upgrade, you can work around this risk using a validator to catch these values, brief demo:\n\nfrom datetime import date\nfrom pydantic import BaseModel, validator\n\nclass DemoModel(BaseModel):\n    date_of_birth: date\n\n    @validator('date_of_birth', pre=True)\n    def skip_infinite_values(cls, v):\n        try:\n            seconds = float(v)\n        except (ValueError, TypeError):\n            return v\n        else:\n            if seconds == float('inf'):\n                return date.max\n            elif seconds == float('-inf'):\n                return date.min\n            else:\n                return seconds\n\nNote: this is not an ideal solution (in particular you'll need a slightly different function for datetimes), instead of a hack like this you should upgrade pydantic.\n\nIf you are not using v1.8.x, v1.7.x or v1.6.x and are unable to upgrade to a fixed version of pydantic, please create an issue requesting a back-port, and we will endeavour to release a patch for earlier versions of pydantic.\nReferences\n\nThis was fixed in commit 7e83fdd.\n","origin":"UNSPECIFIED","severity":"MODERATE","published_at":"2021-05-13T20:23:17.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":3.3,"cvss_vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:L","references":["https://github.com/samuelcolvin/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh","https://github.com/samuelcolvin/pydantic/commit/7e83fdd2563ffac081db7ecdf1affa65ef38c468","https://nvd.nist.gov/vuln/detail/CVE-2021-29510","https://github.com/pydantic/pydantic/commit/1c24f1d74ba95ea985b50bdc001ce96c813229aa","https://github.com/pydantic/pydantic/commit/80e0dd3f752bef145dce12f160d262bb40ec8d47","https://github.com/pydantic/pydantic/commit/bdde15b7b947c94ca00fd6eb92da8db390a13520","https://github.com/pypa/advisory-database/tree/main/vulns/pydantic/PYSEC-2021-47.yaml","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/S2HT266L6Q7H6ICP7DFGXOGBJHNNKMKB","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/UEFWM7DYKD2ZHE7R5YT5EQWJPV4ZKYRB","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/UMKAJX4O6IGBBCE32CO2G7PZQCCQSBLV","https://github.com/advisories/GHSA-5jqp-qgf6-3pvh"],"source_kind":"github","identifiers":["GHSA-5jqp-qgf6-3pvh","CVE-2021-29510"],"repository_url":"https://github.com/samuelcolvin/pydantic","blast_radius":15.487992815605265,"packages":[{"versions":[{"first_patched_version":"1.7.4","vulnerable_version_range":"\u003e= 1.7, \u003c 1.7.4"},{"first_patched_version":"1.8.2","vulnerable_version_range":"\u003e= 1.8, \u003c 1.8.2"},{"first_patched_version":"1.6.2","vulnerable_version_range":"\u003c 1.6.2"}],"ecosystem":"pypi","package_name":"pydantic"}],"created_at":"2022-12-21T16:12:45.825Z","updated_at":"2025-03-03T01:08:10.380Z","epss_percentage":0.0021,"epss_percentile":0.59362}],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/pydantic","docker_dependents_count":7572,"docker_downloads_count":4571113360,"usage_url":"https://repos.ecosyste.ms/usage/pypi/pydantic","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/pydantic/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin","https://github.com/sponsors/pydantic"],"critical":true,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pydantic/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pydantic/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pydantic/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pydantic/related_packages","maintainers":[{"uuid":"dmontagu","login":"dmontagu","name":null,"email":null,"url":null,"packages_count":23,"html_url":"https://pypi.org/user/dmontagu/","role":null,"created_at":"2024-11-06T07:36:56.032Z","updated_at":"2024-11-06T07:36:56.032Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/dmontagu/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":690057,"maintainers_count":292646,"namespaces_count":0,"keywords_count":228482,"github":"pypi","metadata":{"funded_packages_count":48953},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2025-06-05T05:19:27.498Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/namespaces"}},"unique_repositories_count":3888,"unique_repositories_count_past_30_days":200,"recent_issues":[{"uuid":"6044503745","node_id":"PR_kwDOUIt8Cs8AAAABK06DHA","number":32,"state":"open","title":"Bump the pip-minor-and-patch group across 1 directory with 8 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-26T17:08:08.000Z","updated_at":"2026-10-26T17:08:43.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-minor-and-patch","update_count":8,"packages":[{"name":"fastapi","old_version":"0.115.0","new_version":"0.161.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.30.6","new_version":"0.54.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pydantic","old_version":"2.9.2","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.5.2","new_version":"2.16.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"httpx","old_version":"0.27.2","new_version":"0.28.1","repository_url":"https://github.com/encode/httpx"},{"name":"python-dotenv","old_version":"1.0.1","new_version":"1.2.4","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"respx","old_version":"0.21.1","new_version":"0.23.1","repository_url":"https://github.com/lundberg/respx"},{"name":"ruff","old_version":"0.6.9","new_version":"0.17.2","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-minor-and-patch group with 8 updates in the /apps/document-service directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.115.0` | `0.161.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.30.6` | `0.54.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.9.2` | `2.14.1` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.5.2` | `2.16.1` |\n| [httpx](https://github.com/encode/httpx) | `0.27.2` | `0.28.1` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.0.1` | `1.2.4` |\n| [respx](https://github.com/lundberg/respx) | `0.21.1` | `0.23.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.6.9` | `0.17.2` |\n\n\nUpdates `fastapi` from 0.115.0 to 0.161.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.161.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix OpenAPI schemas for standalone nullable form unions. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16598\"\u003e#16598\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.161.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16596\"\u003e#16596\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.160.0\u003c/h2\u003e\n\u003cp\u003eQuery, header, cookie, and form parameter models now apply their \u003ccode\u003eextra\u003c/code\u003e configuration to all submitted fields in the same parameter location, consistent with Pydantic behavior. This includes fields declared in other models, individual parameters, or dependencies, which were previously excluded.\u003c/p\u003e\n\u003cp\u003eWith \u003ccode\u003eextra=\u0026quot;forbid\u0026quot;\u003c/code\u003e, fields outside the model are rejected even if another parameter declares them. With \u003ccode\u003eextra=\u0026quot;allow\u0026quot;\u003c/code\u003e, those fields are included as model extras. With the default \u003ccode\u003eextra=\u0026quot;ignore\u0026quot;\u003c/code\u003e, they are ignored.\u003c/p\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16594\"\u003e#16594\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump certifi from 2026.1.4 to 2026.10.19. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16571\"\u003e#16571\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.159.1\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16586\"\u003e#16586\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.159.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16584\"\u003e#16584\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.158.2\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16582\"\u003e#16582\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.158.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Preserve form media types in OpenAPI. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16579\"\u003e#16579\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.158.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16577\"\u003e#16577\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.157.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/69ddc2badf9da1123bba4d360225ae6b085985f6\"\u003e\u003ccode\u003e69ddc2b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.161.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16599\"\u003e#16599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0cafa07bd4e4c220169e27425f504af3b737d1f8\"\u003e\u003ccode\u003e0cafa07\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/f90d0369380a539c673b1bbbbd86535b8cdee746\"\u003e\u003ccode\u003ef90d036\u003c/code\u003e\u003c/a\u003e 🐛 Fix OpenAPI schemas for standalone nullable form unions (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16598\"\u003e#16598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/80c8742d141e67beaf747343405c8facf999bc0c\"\u003e\u003ccode\u003e80c8742\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.161.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16597\"\u003e#16597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b105209dbf32d1e25ff7357ab706490dcafc9c44\"\u003e\u003ccode\u003eb105209\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e42ac0a13459086f42d96eab13748303bcfa78e7\"\u003e\u003ccode\u003ee42ac0a\u003c/code\u003e\u003c/a\u003e ✨ Add support for combining unions of form models (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16596\"\u003e#16596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/addd0778e996cf886972b8024113d79f8d0a3580\"\u003e\u003ccode\u003eaddd077\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.160.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16595\"\u003e#16595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/352a4edff3f4362f28c42da29e0879846f6f637e\"\u003e\u003ccode\u003e352a4ed\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/91a335ce946c7a832da973f2acf69b8876594216\"\u003e\u003ccode\u003e91a335c\u003c/code\u003e\u003c/a\u003e 🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16594\"\u003e#16594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ce6ee83e5411b98582e996e47edf7870418a68f4\"\u003e\u003ccode\u003ece6ee83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.115.0...0.161.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.30.6 to 0.54.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.54.0\u003c/h2\u003e\n\u003ch2\u003e📨 Send metadata after the response body\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.54.0 adds response trailers and \u003ccode\u003e103 Early Hints\u003c/code\u003e to its experimental HTTP/2 implementation through \u003ccode\u003ezttp\u003c/code\u003e.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.54.0 \u0026quot;zttp\u0026gt;=0.0.34\u0026quot;\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend HTTP/2 response trailers\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e). The ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension lets applications send metadata, such as checksums, after the response body. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them. Multiple trailer messages are combined before completing the response.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental and opt-in.\u003c/strong\u003e Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Upgrade-based h2c and WebSockets over HTTP/2 remain unsupported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e💡 Hint at resources before the final response\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend \u003ccode\u003e103 Early Hints\u003c/code\u003e over HTTP/2\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e). Applications can use the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension to send resource hints before the final response. Each supplied link becomes a separate \u003ccode\u003eLink\u003c/code\u003e header.\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.53.0...0.54.0\"\u003e0.53.0...0.54.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.53.0\u003c/h2\u003e\n\u003ch2\u003e🌐 Opt-in HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.53.0 adds experimental HTTP/2 through \u003ccode\u003ezttp\u003c/code\u003e, alongside a new \u003ccode\u003ezuvloop\u003c/code\u003e integration and connection-handling improvements.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.53.0\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eServe HTTP/1.1 and HTTP/2 with \u003ccode\u003ezttp\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e). Install \u003ccode\u003ezttp\u003c/code\u003e, then enable HTTP/2 with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Uvicorn negotiates HTTP/2 over TLS with ALPN and supports cleartext prior knowledge.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental.\u003c/strong\u003e Upgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚙️ More event loop choice\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eRun Uvicorn with \u003ccode\u003ezuvloop\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e). Install \u003ccode\u003ezuvloop\u003c/code\u003e separately and select it explicitly with \u003ccode\u003e--loop zuvloop\u003c/code\u003e on CPython 3.14 or newer.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🛡️ More reliable connections and proxies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHonor \u003ccode\u003eConnection: close\u003c/code\u003e token lists\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e). Uvicorn now parses comma-separated tokens case-insensitively across HTTP implementations.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTrust IPv6 loopback proxies by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e). The default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value now includes \u003ccode\u003e::1\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKeep upgraded WebSockets alive\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e). Uvicorn cancels the HTTP keep-alive timer when the connection becomes a WebSocket.\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.52.4...0.53.0\"\u003e0.52.4...0.53.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\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.52.3...0.52.4\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/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.54.0 (September 24, 2026)\u003c/h2\u003e\n\u003cp\u003eHTTP/2 support remains experimental. Install \u003ccode\u003ezttp\u0026gt;=0.0.34\u003c/code\u003e and enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd HTTP/2 response trailers through the ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd HTTP/2 \u003ccode\u003e103 Early Hints\u003c/code\u003e through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.53.0 (September 14, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release adds experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e. Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\nUpgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003ezuvloop\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle comma-separated, case-insensitive \u003ccode\u003eConnection: close\u003c/code\u003e tokens across HTTP implementations (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTrust IPv6 loopback in the default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancel the HTTP keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.4 (August 18, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.3 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.2 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.1 (August 1, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComplete the closing handshake on server-initiated WebSocket closes in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e and \u003ccode\u003ewsproto\u003c/code\u003e implementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3053\"\u003e#3053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing write flow control to the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, preventing data truncation on server-initiated closes with large in-flight payloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3048\"\u003e#3048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle connection loss while a WebSocket write is waiting on backpressure (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3050\"\u003e#3050\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3eb9a9ab9af69005c687728097461c1fd2a95db9\"\u003e\u003ccode\u003e3eb9a9a\u003c/code\u003e\u003c/a\u003e Version 0.54.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3161\"\u003e#3161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/cd7ef6d31c1a09a3653f326cda7813d35ffd6082\"\u003e\u003ccode\u003ecd7ef6d\u003c/code\u003e\u003c/a\u003e Remove races from supervisor tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3134\"\u003e#3134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a56c7cce64aaa37e5864f882a5cbce8aa1dac47a\"\u003e\u003ccode\u003ea56c7cc\u003c/code\u003e\u003c/a\u003e Support HTTP/2 response trailers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3146\"\u003e#3146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9bd4404cca9506e9ba4f46b69ef72d011ceef2bd\"\u003e\u003ccode\u003e9bd4404\u003c/code\u003e\u003c/a\u003e chore(deps): bump anyio from 4.13.0 to 4.14.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3145\"\u003e#3145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/21f39ef7988366f77fb3172569bd235ac5de34cc\"\u003e\u003ccode\u003e21f39ef\u003c/code\u003e\u003c/a\u003e Add HTTP/2 Early Hints support (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/421708fbc1a704dac8bd4053a7c4c0bf4d3704ee\"\u003e\u003ccode\u003e421708f\u003c/code\u003e\u003c/a\u003e Version 0.53.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3136\"\u003e#3136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/f1a1bff7be819f5724d6fdf86dfd448a97c62e23\"\u003e\u003ccode\u003ef1a1bff\u003c/code\u003e\u003c/a\u003e Unset the keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/63971ed952090438896e6eba7d07178b616d97cc\"\u003e\u003ccode\u003e63971ed\u003c/code\u003e\u003c/a\u003e Document HTTP/2 support (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3130\"\u003e#3130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7d1a0055aee5e281accc646b559ddd147486bf8a\"\u003e\u003ccode\u003e7d1a005\u003c/code\u003e\u003c/a\u003e Remove race from multiprocess health check test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3128\"\u003e#3128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/5ac6265a01ff6dcadb0e4250152c3deaf8a168a9\"\u003e\u003ccode\u003e5ac6265\u003c/code\u003e\u003c/a\u003e Add ::1 to FORWARDED_ALLOW_IPS (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.30.6...0.54.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.9.2 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.9.2...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-settings` from 2.5.2 to 2.16.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.16.1\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThis patch release fixes two CLI regressions introduced in 2.16.0.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed-length tuple positionals such as \u003ccode\u003eCliPositionalArg[tuple[int, int]]\u003c/code\u003e and \u003ccode\u003eNamedTuple\u003c/code\u003es are single-valued again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1069\"\u003e#1069\u003c/a\u003e). Since 2.16.0 they were treated as variadic, so a CLI either refused to start with a \u003ccode\u003eSettingsError\u003c/code\u003e or put the wrong argument into the tuple. Variable-length tuples (\u003ccode\u003etuple[int, ...]\u003c/code\u003e and bare \u003ccode\u003eTuple\u003c/code\u003e) are still variadic.\u003c/li\u003e\n\u003cli\u003eA field typed as an alias of a list of dicts, e.g. \u003ccode\u003etype ListOfDict = list[dict[str, int]]\u003c/code\u003e, accepts a JSON list again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1049\"\u003e#1049\u003c/a\u003e). Since 2.16.0, \u003ccode\u003e--xx '[{\u0026quot;a\u0026quot;:1},{\u0026quot;b\u0026quot;:2}]'\u003c/code\u003e was merged into the single dict \u003ccode\u003e{\u0026quot;a\u0026quot;: 1, \u0026quot;b\u0026quot;: 2}\u003c/code\u003e and failed validation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden CI by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1044\"\u003epydantic/pydantic-settings#1044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep list of dicts CLI values as lists 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/1049\"\u003epydantic/pydantic-settings#1049\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep fixed-length tuple CLI positionals single-valued 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/1069\"\u003epydantic/pydantic-settings#1069\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.16.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/1087\"\u003epydantic/pydantic-settings#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1056\"\u003epydantic/pydantic-settings#1056\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.16.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBreaking changes and behavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.10 is no longer supported\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1003\"\u003e#1003\u003c/a\u003e). pydantic-settings now requires Python 3.11+, since 3.10 reaches end of life this month. The \u003ccode\u003etomli\u003c/code\u003e fallback is gone in favor of stdlib \u003ccode\u003etomllib\u003c/code\u003e; the \u003ccode\u003etoml\u003c/code\u003e extra is kept as an empty extra so \u003ccode\u003epip install pydantic-settings[toml]\u003c/code\u003e keeps working.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003epython-dotenv\u0026gt;=1.2.2\u003c/code\u003e is now required\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/971\"\u003e#971\u003c/a\u003e) to pick up the fix for CVE-2026-28684.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAliases are ignored in every source when \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1033\"\u003e#1033\u003c/a\u003e). Env vars, secrets, CLI flags and defaults now use only field names, matching pydantic. An env var named after the alias is now ignored instead of raising \u003ccode\u003eextra_forbidden\u003c/code\u003e, and the CLI exposes \u003ccode\u003e--apple\u003c/code\u003e rather than \u003ccode\u003e--pomo\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003evalidation_alias\u003c/code\u003e takes precedence over \u003ccode\u003ealias\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1038\"\u003e#1038\u003c/a\u003e). When the two differ, values from JSON/YAML/TOML files and the CLI were silently ignored; they now load. CLI help lists the \u003ccode\u003evalidation_alias\u003c/code\u003e flag first, and \u003ccode\u003eCliApp.serialize\u003c/code\u003e emits it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCLI case-insensitivity only lowercases registered options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1036\"\u003e#1036\u003c/a\u003e). With \u003ccode\u003ecase_sensitive=False\u003c/code\u003e, args after \u003ccode\u003e--\u003c/code\u003e and those captured by \u003ccode\u003eCliUnknownArgs\u003c/code\u003e keep their case (\u003ccode\u003e-Xmx4G\u003c/code\u003e no longer becomes \u003ccode\u003e-xmx4g\u003c/code\u003e). Unrecognized options are now reported as typed (\u003ccode\u003e--NOPE\u003c/code\u003e instead of \u003ccode\u003e--nope\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eJSON and YAML config files are read as UTF-8 by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/955\"\u003e#955\u003c/a\u003e) instead of the locale encoding, completing the secrets-file fix from 2.15.0. \u003ccode\u003ejson_file_encoding\u003c/code\u003e/\u003ccode\u003eyaml_file_encoding\u003c/code\u003e still override it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDiscriminated union defaults are partially updated again\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/997\"\u003e#997\u003c/a\u003e). This reverts the 2.15.0 regression with \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e: the default is only dropped when the incoming value selects a \u003cem\u003edifferent\u003c/em\u003e union member.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.15 and pydantic 2.14 support\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1026\"\u003e#1026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1029\"\u003e#1029\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1022\"\u003e#1022\u003c/a\u003e). pydantic 2.14 broke \u003ccode\u003eCliApp.run\u003c/code\u003e and \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e handling; both are fixed.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCached settings instances\u003c/strong\u003e via \u003ccode\u003eSettings.settings_cached()\u003c/code\u003e and \u003ccode\u003eSettings.settings_clear_cache()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/952\"\u003e#952\u003c/a\u003e). These give you a process-local singleton per settings class without hand-rolling \u003ccode\u003elru_cache\u003c/code\u003e wrappers. Calling the class directly still builds a fresh instance.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAWS Systems Manager Parameter Store source\u003c/strong\u003e — \u003ccode\u003eAWSSystemsManagerSettingsSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/941\"\u003e#941\u003c/a\u003e). It recursively reads every parameter under an \u003ccode\u003essm_path\u003c/code\u003e, with \u003ccode\u003e/\u003c/code\u003e mapping onto nested models. Install it with the new \u003ccode\u003eaws-systems-manager\u003c/code\u003e extra.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenv_file_depth\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/940\"\u003e#940\u003c/a\u003e) lets a relative \u003ccode\u003eenv_file\u003c/code\u003e be found in parent directories, mirroring \u003ccode\u003epyproject_toml_depth\u003c/code\u003e. This is useful when scripts run from a subdirectory of a monorepo. It defaults to \u003ccode\u003e0\u003c/code\u003e, which keeps the current behavior.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eCliVariadicArg\u003c/code\u003e for named variadic options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/949\"\u003e#949\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/958\"\u003e#958\u003c/a\u003e). It accepts \u003ccode\u003e--param a b c\u003c/code\u003e in addition to repeated \u003ccode\u003e--param a --param b\u003c/code\u003e. Required fields need at least one value.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4e286e284fe43f0fb86872b91f708d3dd5356bfc\"\u003e\u003ccode\u003e4e286e2\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1087\"\u003e#1087\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/993b59e1682799d5ad33b721b7158718b6278944\"\u003e\u003ccode\u003e993b59e\u003c/code\u003e\u003c/a\u003e Keep fixed-length tuple CLI positionals single-valued (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1069\"\u003e#1069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f651a7a57a0e3b26147da02f2fda2d05f8c34cce\"\u003e\u003ccode\u003ef651a7a\u003c/code\u003e\u003c/a\u003e Keep list of dicts CLI values as lists (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1049\"\u003e#1049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ecf7d90bf1b1b71f2875f607c1668c44f576bf9c\"\u003e\u003ccode\u003eecf7d90\u003c/code\u003e\u003c/a\u003e Harden CI (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1044\"\u003e#1044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8c259f41b49b4cefbe4fb676d3c1f52dddd3cca8\"\u003e\u003ccode\u003e8c259f4\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1043\"\u003e#1043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4bc667ada383aca4df00304cd171f327a9fae163\"\u003e\u003ccode\u003e4bc667a\u003c/code\u003e\u003c/a\u003e Keep case of non-option CLI args when case_sensitive=False (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f75a8057a5fafe4aef3a042c2adf367c6987f73f\"\u003e\u003ccode\u003ef75a805\u003c/code\u003e\u003c/a\u003e Simplify alias resolution branch and test alias with AliasChoices/AliasPath (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/cfdc5585e821e84905905027de68a0188213537a\"\u003e\u003ccode\u003ecfdc558\u003c/code\u003e\u003c/a\u003e Honor env_parse_none_str for GCP Secret Manager (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1040\"\u003e#1040\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/081d39f9c73f46e68bc2bef75a23f7d84ed0c377\"\u003e\u003ccode\u003e081d39f\u003c/code\u003e\u003c/a\u003e Fix config file and CLI values being ignored when alias differs from validati...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c46ebc4cc599c09f3692f4d2e82a8f0bb5433f3a\"\u003e\u003ccode\u003ec46ebc4\u003c/code\u003e\u003c/a\u003e Expand home paths when checking TOML table headers (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.5.2...v2.16.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httpx` from 0.27.2 to 0.28.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/httpx/releases\"\u003ehttpx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.28.1\u003c/h2\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 0.28.0\u003c/h2\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/HEAD/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/httpx/blob/master/CHANGELOG.md\"\u003ehttpx's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eBe aware that the default \u003cem\u003eJSON request bodies now use a more compact representation\u003c/em\u003e. This is generally considered a prefered style, tho may require updates to test suites.\u003c/p\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations...\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/master/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/26d48e0634e6ee9cdc0533996db289ce4b430177\"\u003e\u003ccode\u003e26d48e0\u003c/code\u003e\u003c/a\u003e Version 0.28.1 (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3445\"\u003e#3445\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/89599a9541af14bcf906fc4ed58ccbdf403802ba\"\u003e\u003ccode\u003e89599a9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003everify=False\u003c/code\u003e, \u003ccode\u003ecert=...\u003c/code\u003e case. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3442\"\u003e#3442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/8ecb86f0d74ffc52d4663214fae9526bee89358d\"\u003e\u003ccode\u003e8ecb86f\u003c/code\u003e\u003c/a\u003e Add test for request params behavior changes (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3440\"\u003e#3440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/0cb7e5a2e736628e2f506d259fcf0d48cd2bde82\"\u003e\u003ccode\u003e0cb7e5a\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 11 updates (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3434\"\u003e#3434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/15e21e9ea3cad4f06e22a7e704aabefdf43d2e29\"\u003e\u003ccode\u003e15e21e9\u003c/code\u003e\u003c/a\u003e Updating deprecated docstring Client() class (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3426\"\u003e#3426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/80960fa31918d7663c3f4c3ad61661cf0e80628f\"\u003e\u003ccode\u003e80960fa\u003c/code\u003e\u003c/a\u003e Version 0.28.0. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3419\"\u003e#3419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/a33c87852b8a0dddc65e5f739af1e0a6fca4b91f\"\u003e\u003ccode\u003ea33c878\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eextensions\u003c/code\u003e type annotation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3380\"\u003e#3380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/ce7e14da27abba6574be9b3ea7cd5990556a9343\"\u003e\u003ccode\u003ece7e14d\u003c/code\u003e\u003c/a\u003e Error on verify as str. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3418\"\u003e#3418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/47f4a96ffaaaa07dca1614409549b5d7a6e7af49\"\u003e\u003ccode\u003e47f4a96\u003c/code\u003e\u003c/a\u003e Handle empty zstd responses (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3412\"\u003e#3412\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/189fc4bcbe5f314128775dec66a616ac9a31ad48\"\u003e\u003ccode\u003e189fc4b\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md, fix typo(s) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3406\"\u003e#3406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/httpx/compare/0.27.2...0.28.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.0.1 to 1.2.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003edotenv get\u003c/code\u003e no longer exits with code 1 for empty string values (\u003ccode\u003eKEY=\u003c/code\u003e) by [\u003ca href=\"https://github.com/ShamikOfficial\"\u003e\u003ccode\u003e@​ShamikOfficial\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAn unquoted empty value followed by an inline comment (e.g. \u003ccode\u003eKEY= # comment\u003c/code\u003e) is now parsed as an empty string instead of the comment text by [\u003ca href=\"https://github.com/Noethix55555\"\u003e\u003ccode\u003e@​Noethix55555\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run --no-override\u003c/code\u003e now expands variable references with the same precedence as \u003ccode\u003eload_dotenv(override=False)\u003c/code\u003e, so a value like \u003ccode\u003e${BASE}/suffix\u003c/code\u003e uses the existing \u003ccode\u003eBASE\u003c/code\u003e from the environment instead of the one from the \u003ccode\u003e.env\u003c/code\u003e file by [\u003ca href=\"https://github.com/ROTl24\"\u003e\u003ccode\u003e@​ROTl24\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.2.3\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- 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/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.4] - 2026-10-01\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003edotenv get\u003c/code\u003e no longer exits with code 1 for empty string values (\u003ccode\u003eKEY=\u003c/code\u003e) by [\u003ca href=\"https://github.com/ShamikOfficial\"\u003e\u003ccode\u003e@​ShamikOfficial\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAn unquoted empty value followed by an inline comment (e.g. \u003ccode\u003eKEY= # comment\u003c/code\u003e) is now parsed as an empty string instead of the comment text by [\u003ca href=\"https://github.com/Noethix55555\"\u003e\u003ccode\u003e@​Noethix55555\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run --no-override\u003c/code\u003e now expands variable references with the same precedence as \u003ccode\u003eload_dotenv(override=False)\u003c/code\u003e, so a value like \u003ccode\u003e${BASE}/suffix\u003c/code\u003e uses the existing \u003ccode\u003eBASE\u003c/code\u003e from the environment instead of the one from the \u003ccode\u003e.env\u003c/code\u003e file by [\u003ca href=\"https://github.com/ROTl24\"\u003e\u003ccode\u003e@​ROTl24\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.3] - 2026-08-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/a565c2cc41599c48eabc6b7b7f5b826d43c5a6d7\"\u003e\u003ccode\u003ea565c2c\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.3 → 1.2.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a7abd00261e51baba958e15f443c66165042ea2\"\u003e\u003ccode\u003e4a7abd0\u003c/code\u003e\u003c/a\u003e docs: add 1.2.4 release notes (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f215c0274dc4c310e5ca5feb4c6bddade25ece21\"\u003e\u003ccode\u003ef215c02\u003c/code\u003e\u003c/a\u003e fix: dotenv get exits 0 for empty string values (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/58f2d7c112235b347040bb5cb579d4ebc0a0ad91\"\u003e\u003ccode\u003e58f2d7c\u003c/code\u003e\u003c/a\u003e test: make test_run_with_command_flags portable and meaningful (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/709\"\u003e#709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e0310e5bb3f2b701b11bbc007ca0c82c1bd56f38\"\u003e\u003ccode\u003ee0310e5\u003c/code\u003e\u003c/a\u003e fix: honor --no-override when expanding variables in dotenv run (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/a00cb2eed0704cd6d2071b2004c37e95ccc86ee5\"\u003e\u003ccode\u003ea00cb2e\u003c/code\u003e\u003c/a\u003e docs: add CHANGELOG entry for \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e (fix \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/600\"\u003e#600\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f5485a61eefa5e686d6d5bdc7aa9ad6b104b1e92\"\u003e\u003ccode\u003ef5485a6\u003c/code\u003e\u003c/a\u003e fix: parse empty unquoted value with inline comment as empty string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/49515afee2d50c33cad9419b3800b3a0dc93fc59\"\u003e\u003ccode\u003e49515af\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.2 → 1.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/8ac846ff2760b65470e769d7eed33e540f0934e1\"\u003e\u003ccode\u003e8ac846f\u003c/code\u003e\u003c/a\u003e chore: add release runbook (RELEASING.md) and make release target\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/bb31c944fb4b40e8dea59587f525840c38326166\"\u003e\u003ccode\u003ebb31c94\u003c/code\u003e\u003c/a\u003e docs: add 1.2.3 release notes (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.0.1...v1.2.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `respx` from 0.21.1 to 0.23.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/lundberg/respx/releases\"\u003erespx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.23.1\u003c/h2\u003e\n\u003ch2\u003e0.23.1 (8th April 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression causing \u003ccode\u003eparams\u003c/code\u003e pattern to stop working under some conditions,\nby doing a strict detection of \u003ccode\u003eANY\u003c/code\u003e in multi items patterns (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/313\"\u003e#313\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate workflows actions (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/310\"\u003e#310\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 0.23.0\u003c/h2\u003e\n\u003ch2\u003e0.23.0 (7th April 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003edata\u003c/code\u003e pattern with list value (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/264\"\u003e#264\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix and enhance incorrect documentations about iterable side effects (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/287\"\u003e#287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix documentation typo, thanks \u003ca href=\"https://github.com/markhobson\"\u003e\u003ccode\u003e@​markhobson\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix support for multiple slashes \u003ccode\u003e//\u003c/code\u003e in URL path by not using \u003ccode\u003eurljoin\u003c/code\u003e when\nprepending path, thanks \u003ca href=\"https://github.com/lewiscollard\"\u003e\u003ccode\u003e@​lewiscollard\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Skeen\"\u003e\u003ccode\u003e@​Skeen\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/302\"\u003e#302\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eType Route.respond json as \u003ccode\u003eAny\u003c/code\u003e to align with HTTPX, thanks \u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/284\"\u003e#284\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProperly handle \u003ccode\u003eANY\u003c/code\u003e in \u003ccode\u003eMuitiItems\u003c/code\u003e patterns (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/289\"\u003e#289\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix test warnings (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/267\"\u003e#267\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Python 3.14 to test matrix, thanks \u003ca href=\"https://github.com/carlosdorneles-mb\"\u003e\u003ccode\u003e@​carlosdorneles-mb\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/300\"\u003e#300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate nix flake, mypy target and workflows (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/306\"\u003e#306\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/lundberg/respx/issues/282\"\u003e#282\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 0.22.0\u003c/h2\u003e\n\u003ch2\u003e0.22.0 (19th December 2024)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport HTTPX 0.28.0, thanks \u003ca href=\"https://github.com/ndhansen\"\u003e\u003ccode\u003e@​ndhansen\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/278\"\u003e#278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.7, to align with HTTPX 0.25.0 (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/280\"\u003e#280\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CI test to not fail fast and cancel workflows, thanks \u003ca href=\"https://github.com/flaeppe\"\u003e\u003ccode\u003e@​flaeppe\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/269\"\u003e#269\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd dependabot to check GitHub actions packages, thanks \u003ca href=\"https://github.com/flaeppe\"\u003e\u003ccode\u003e@​flaeppe\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/268\"\u003e#268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Python 3.13 to test suite, thanks \u003ca href=\"https://github.com/jairhenrique\"\u003e\u003ccode\u003e@​jairhenrique\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.githu...\n\n_Description has been truncated_","html_url":"https://github.com/EcoTraces/njala-past-papers-platform/pull/32","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/EcoTraces%2Fnjala-past-papers-platform/issues/32","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/32/packages"},{"uuid":"6043814415","node_id":"PR_kwDOUqNq-88AAAABK0WLKg","number":22,"state":"open","title":"chore(deps): bump the python-minor-and-patch group across 1 directory with 23 updates","user":"dependabot[bot]","labels":["dependencies","chore","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-26T16:27:01.000Z","updated_at":"2026-10-26T16:27:55.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-minor-and-patch","update_count":23,"packages":[{"name":"aiohttp","old_version":"3.14.3","new_version":"3.14.5","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"azure-identity","old_version":"1.25.0","new_version":"1.26.0","repository_url":"https://github.com/Azure/azure-sdk-for-python"},{"name":"boto3","old_version":"1.43.78","new_version":"1.43.118","repository_url":"https://github.com/boto/boto3"},{"name":"certifi","old_version":"2026.7.22","new_version":"2026.10.23","repository_url":"https://github.com/certifi/python-certifi"},{"name":"gitpython","old_version":"3.1.62","new_version":"3.2.1","repository_url":"https://github.com/gitpython-developers/GitPython"},{"name":"starlette","old_version":"1.6.0","new_version":"1.9.0","repository_url":"https://github.com/Kludex/starlette"},{"name":"pyjwt","old_version":"2.13.0","new_version":"2.15.1","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-gitlab","old_version":"8.3.0","new_version":"8.6.0","repository_url":"https://github.com/python-gitlab/python-gitlab"},{"name":"starlette-context","old_version":"0.3.6","new_version":"0.5.1","repository_url":"https://github.com/tomwojcik/starlette-context"},{"name":"uvicorn","old_version":"0.52.4","new_version":"0.54.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"a2a-sdk","old_version":"1.0.3","new_version":"1.2.3"},{"name":"pydantic","old_version":"2.13.3","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.14.2","new_version":"2.16.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"prometheus-client","old_version":"0.21.1","new_version":"0.26.0","repository_url":"https://github.com/prometheus/client_python"},{"name":"langchain","old_version":"1.3.11","new_version":"1.4.7","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-core","old_version":"1.4.8","new_version":"1.7.0","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-openai","old_version":"1.3.3","new_version":"1.7.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"pandas","old_version":"3.0.3","new_version":"3.1.0","repository_url":"https://github.com/pandas-dev/pandas"},{"name":"pinecone","old_version":"10.0.0","new_version":"10.1.0","repository_url":"https://github.com/pinecone-io/python-sdk"},{"name":"lancedb","old_version":"0.38.0","new_version":"0.40.0","repository_url":"https://github.com/lancedb/lancedb"},{"name":"qdrant-client","old_version":"1.15.1","new_version":"1.20.0","repository_url":"https://github.com/qdrant/qdrant-client"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.7.0","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"ruff","old_version":"0.16.8","new_version":"0.17.2","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-and-patch group with 23 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.14.3` | `3.14.5` |\n| [azure-identity](https://github.com/Azure/azure-sdk-for-python) | `1.25.0` | `1.26.0` |\n| [boto3](https://github.com/boto/boto3) | `1.43.78` | `1.43.118` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.7.22` | `2026.10.23` |\n| [gitpython](https://github.com/gitpython-developers/GitPython) | `3.1.62` | `3.2.1` |\n| [starlette](https://github.com/Kludex/starlette) | `1.6.0` | `1.9.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.13.0` | `2.15.1` |\n| [python-gitlab](https://github.com/python-gitlab/python-gitlab) | `8.3.0` | `8.6.0` |\n| [starlette-context](https://github.com/tomwojcik/starlette-context) | `0.3.6` | `0.5.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.52.4` | `0.54.0` |\n| [a2a-sdk[http-server]](https://github.com/a2aproject/a2a-python) | `1.0.3` | `1.2.3` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.3` | `2.14.1` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.2` | `2.16.1` |\n| [prometheus-client](https://github.com/prometheus/client_python) | `0.21.1` | `0.26.0` |\n| [langchain](https://github.com/langchain-ai/langchain) | `1.3.11` | `1.4.7` |\n| [langchain-core](https://github.com/langchain-ai/langchain) | `1.4.8` | `1.7.0` |\n| [langchain-openai](https://github.com/langchain-ai/langchain) | `1.3.3` | `1.7.2` |\n| [pandas](https://github.com/pandas-dev/pandas) | `3.0.3` | `3.1.0` |\n| [pinecone](https://github.com/pinecone-io/python-sdk) | `10.0.0` | `10.1.0` |\n| [lancedb](https://github.com/lancedb/lancedb) | `0.38.0` | `0.40.0` |\n| [qdrant-client](https://github.com/qdrant/qdrant-client) | `1.15.1` | `1.20.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.7.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.8` | `0.17.2` |\n\n\nUpdates `aiohttp` from 3.14.3 to 3.14.5\nUpdates `azure-identity` from 1.25.0 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/Azure/azure-sdk-for-python/releases\"\u003eazure-identity's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eazure-identity_1.26.0\u003c/h2\u003e\n\u003ch2\u003e1.26.0 (2026-09-30)\u003c/h2\u003e\n\u003ch3\u003eFeatures Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eManagedIdentityCredential\u003c/code\u003e now supports user-assigned managed identities on Azure Arc-enabled servers. An identity can be selected by client ID, object ID, or resource ID. Token responses that do not confirm the requested identity are rejected. (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/pull/48967\"\u003e#48967\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBugs Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed synchronous Service Fabric managed identity authentication with MSAL 1.39.0 and later. Service Fabric now uses the session from an Azure Core \u003ccode\u003eRequestsTransport\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/pull/48967\"\u003e#48967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed an issue where \u003ccode\u003eAuthorizationCodeCredential\u003c/code\u003e and the asynchronous \u003ccode\u003eOnBehalfOfCredential\u003c/code\u003e could return a cached token for another account when multiple credentials shared a token cache. (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/pull/49001\"\u003e#49001\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eRequestIdPolicy\u003c/code\u003e to the default pipeline policies to ensure a unique \u003ccode\u003ex-ms-client-request-id\u003c/code\u003e header is sent with each request. (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/pull/46070\"\u003e#46070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCertificateCredential\u003c/code\u003e now passes the PEM private key to MSAL as a \u003ccode\u003estr\u003c/code\u003e rather than \u003ccode\u003ebytes\u003c/code\u003e, matching MSAL's documented \u003ccode\u003eclient_credential\u003c/code\u003e contract. (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/pull/46801\"\u003e#46801\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum dependency on \u003ccode\u003emsal\u003c/code\u003e to \u003ccode\u003e\u0026gt;=1.39.0\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/Azure/azure-sdk-for-python/commit/30d8bb95bf21f28fc5ed7a0fc9da43a46765c81e\"\u003e\u003ccode\u003e30d8bb9\u003c/code\u003e\u003c/a\u003e [identity] prepare azure-identity 1.26.0 release (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49290\"\u003e#49290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/c7148b7494ddfe0f726e35168fac7e513d458a90\"\u003e\u003ccode\u003ec7148b7\u003c/code\u003e\u003c/a\u003e [identity] Enable user-assigned managed identity for AzureArcCredential (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48967\"\u003e#48967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/c5b1f4f9138942a3746091c4dac7eda67a08edf2\"\u003e\u003ccode\u003ec5b1f4f\u003c/code\u003e\u003c/a\u003e [Identity] Fix identity cache issue (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49001\"\u003e#49001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/9d085c1814586b0d4e91da6b463d288901c44c8d\"\u003e\u003ccode\u003e9d085c1\u003c/code\u003e\u003c/a\u003e [AutoPR azure-mgmt-compute-bulkaction]-generated-from-SDK Generation - Python...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/efc412d8c56bbc428a12c057042a7c20818d1322\"\u003e\u003ccode\u003eefc412d\u003c/code\u003e\u003c/a\u003e [TA] fix release error (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49261\"\u003e#49261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/3d9b8b3d98abc1191457f994f759f6b407dd9238\"\u003e\u003ccode\u003e3d9b8b3\u003c/code\u003e\u003c/a\u003e Prepare Responses 2.3.0b2 release (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49281\"\u003e#49281\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/8e49d150aaf513e014f6bef49e72c3e257b6c304\"\u003e\u003ccode\u003e8e49d15\u003c/code\u003e\u003c/a\u003e [AutoPR azure-mgmt-resiliencemanagement]-generated-from-SDK Generation - Pyth...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/ef68c78fa2bc6013e97bbb2335935f0f7e75ade0\"\u003e\u003ccode\u003eef68c78\u003c/code\u003e\u003c/a\u003e Preserve canonical agent reference in response snapshots (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49256\"\u003e#49256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/3754db9e571e7f68407030d945b2aef1fd28cfa8\"\u003e\u003ccode\u003e3754db9\u003c/code\u003e\u003c/a\u003e Configurations:  'specification/applink/AppLink.Management/tspconfig.yaml', a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/0929352f45d0c3cea2fcadd4eacefffbf937abef\"\u003e\u003ccode\u003e0929352\u003c/code\u003e\u003c/a\u003e [Mgmt] Make review drafts and incomplete outcomes reliable (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49275\"\u003e#49275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Azure/azure-sdk-for-python/compare/azure-identity_1.25.0...azure-identity_1.26.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.43.78 to 1.43.118\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/185b1bd1bb677650bd986d581d19c0ed3596e583\"\u003e\u003ccode\u003e185b1bd\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.118'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/732c473d141c94365d0ba679f1b376b17ca7f429\"\u003e\u003ccode\u003e732c473\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.118\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b087cd3965d0c876c498ebd755d7663562dc39c8\"\u003e\u003ccode\u003eb087cd3\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/69e35c33ecdb461f226c479190ee8909b10a279c\"\u003e\u003ccode\u003e69e35c3\u003c/code\u003e\u003c/a\u003e Backfill 1.43.117 changelog entry for CA bundle fix (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4861\"\u003e#4861\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/36676797cc898470e079f032e7b43085135792e0\"\u003e\u003ccode\u003e3667679\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.117'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/ea1363487385e9c0788b08208a33f0c3e0c25951\"\u003e\u003ccode\u003eea13634\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.117' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/94f6b3ecda6e8ac834415299db7c3547442667d7\"\u003e\u003ccode\u003e94f6b3e\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.117\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1eba892af3005e14aebca3c8974a7aec69b00a5d\"\u003e\u003ccode\u003e1eba892\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/cfa48089b7c2d51815e49c7aeac1398ce955d83f\"\u003e\u003ccode\u003ecfa4808\u003c/code\u003e\u003c/a\u003e Bump \u003ca href=\"https://github.com/astral-sh/ruff-pre-commit\"\u003ehttps://github.com/astral-sh/ruff-pre-commit\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4860\"\u003e#4860\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/dbaa95d6cec6e692615db69ddcebccf814a70e8c\"\u003e\u003ccode\u003edbaa95d\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.116'\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.78...1.43.118\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.7.22 to 2026.10.23\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/b60466c9f2882d9cf088943c650b0faac06c080c\"\u003e\u003ccode\u003eb60466c\u003c/code\u003e\u003c/a\u003e 2026.10.23 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/445\"\u003e#445\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/662df63d7906df66f1f07c0751a3dfe9da14d914\"\u003e\u003ccode\u003e662df63\u003c/code\u003e\u003c/a\u003e Restore unaffected emSign roots (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/439\"\u003e#439\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/440\"\u003e#440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5cb238caeeb6c30ec1a7309ad3e16a5aa7b10ce8\"\u003e\u003ccode\u003e5cb238c\u003c/code\u003e\u003c/a\u003e Remove emsign (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/69494a764d0a08f90838d53d4b0fefd3e84045d6\"\u003e\u003ccode\u003e69494a7\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.1 to 8.0.2 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/436\"\u003e#436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/029c7b0913d79e2efb73a216fc5c5e13ef958536\"\u003e\u003ccode\u003e029c7b0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.1 to 7.0.2 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/435\"\u003e#435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/9d0a8f1f3a0d6b2e38d5773db7afe1a37e4527b6\"\u003e\u003ccode\u003e9d0a8f1\u003c/code\u003e\u003c/a\u003e Add support for Python 3.15 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/432\"\u003e#432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/db472abf0a37067cb4488f036f4c19adf6b6ec3c\"\u003e\u003ccode\u003edb472ab\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.07.22...2026.10.23\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gitpython` from 3.1.62 to 3.2.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gitpython-developers/GitPython/releases\"\u003egitpython's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.2.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eprepare for next release, v3.2 by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2260\"\u003egitpython-developers/GitPython#2260\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eobjects: decode a byte mode before reading its digits by \u003ca href=\"https://github.com/SashaMIT\"\u003e\u003ccode\u003e@​SashaMIT\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2261\"\u003egitpython-developers/GitPython#2261\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump \u003ca href=\"https://github.com/astral-sh/ruff-pre-commit\"\u003ehttps://github.com/astral-sh/ruff-pre-commit\u003c/a\u003e from v0.16.5 to 0.16.9 in the pre-commit 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/gitpython-developers/GitPython/pull/2263\"\u003egitpython-developers/GitPython#2263\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(submodule): validate destinations before mutation by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2264\"\u003egitpython-developers/GitPython#2264\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(util): create lock files in one exclusive step by \u003ca href=\"https://github.com/radhika1314\"\u003e\u003ccode\u003e@​radhika1314\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2267\"\u003egitpython-developers/GitPython#2267\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(commit): accumulate gpgsig continuation lines in linear time by \u003ca href=\"https://github.com/Keerthana-64\"\u003e\u003ccode\u003e@​Keerthana-64\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2268\"\u003egitpython-developers/GitPython#2268\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(index): accept a single PathLike in checkout by \u003ca href=\"https://github.com/kokotatan\"\u003e\u003ccode\u003e@​kokotatan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2269\"\u003egitpython-developers/GitPython#2269\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(util): redact URL credentials without corrupting the host by \u003ca href=\"https://github.com/yunaremaia\"\u003e\u003ccode\u003e@​yunaremaia\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2270\"\u003egitpython-developers/GitPython#2270\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echange line for changelogs by \u003ca href=\"https://github.com/CrowZhen\"\u003e\u003ccode\u003e@​CrowZhen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2272\"\u003egitpython-developers/GitPython#2272\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(commit): reject identity fields that alter commit headers by \u003ca href=\"https://github.com/Keerthana-64\"\u003e\u003ccode\u003e@​Keerthana-64\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2271\"\u003egitpython-developers/GitPython#2271\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: stop stalled remote commands when their timeout expires by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2277\"\u003egitpython-developers/GitPython#2277\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(util): reject symbolic links that alias \u003ccode\u003e.gitmodules\u003c/code\u003e by \u003ca href=\"https://github.com/Keerthana-64\"\u003e\u003ccode\u003e@​Keerthana-64\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2278\"\u003egitpython-developers/GitPython#2278\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: send one object name or path per git stdin record by \u003ca href=\"https://github.com/Keerthana-64\"\u003e\u003ccode\u003e@​Keerthana-64\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2279\"\u003egitpython-developers/GitPython#2279\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(stats): preserve whitespace in filenames by \u003ca href=\"https://github.com/v1shay\"\u003e\u003ccode\u003e@​v1shay\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2280\"\u003egitpython-developers/GitPython#2280\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(config): preserve exact large integer values by \u003ca href=\"https://github.com/xiehuanyi\"\u003e\u003ccode\u003e@​xiehuanyi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2281\"\u003egitpython-developers/GitPython#2281\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve IterableList names independently of list attributes by \u003ca href=\"https://github.com/FanWu-ai\"\u003e\u003ccode\u003e@​FanWu-ai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2283\"\u003egitpython-developers/GitPython#2283\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix relative blocking lock 20261011 by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2284\"\u003egitpython-developers/GitPython#2284\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/SashaMIT\"\u003e\u003ccode\u003e@​SashaMIT\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2261\"\u003egitpython-developers/GitPython#2261\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kokotatan\"\u003e\u003ccode\u003e@​kokotatan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2269\"\u003egitpython-developers/GitPython#2269\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yunaremaia\"\u003e\u003ccode\u003e@​yunaremaia\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2270\"\u003egitpython-developers/GitPython#2270\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CrowZhen\"\u003e\u003ccode\u003e@​CrowZhen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2272\"\u003egitpython-developers/GitPython#2272\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/v1shay\"\u003e\u003ccode\u003e@​v1shay\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2280\"\u003egitpython-developers/GitPython#2280\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/xiehuanyi\"\u003e\u003ccode\u003e@​xiehuanyi\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2281\"\u003egitpython-developers/GitPython#2281\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/FanWu-ai\"\u003e\u003ccode\u003e@​FanWu-ai\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2283\"\u003egitpython-developers/GitPython#2283\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/gitpython-developers/GitPython/compare/3.2.0...3.2.1\"\u003ehttps://github.com/gitpython-developers/GitPython/compare/3.2.0...3.2.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.2.0 - Security\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003etest: cover subdirectory discovery and pathspec commands in bare-repository worktrees by \u003ca href=\"https://github.com/christianvuerings\"\u003e\u003ccode\u003e@​christianvuerings\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2228\"\u003egitpython-developers/GitPython#2228\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRead git's yes/no and on/off booleans in get_value by \u003ca href=\"https://github.com/rawsun007\"\u003e\u003ccode\u003e@​rawsun007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2229\"\u003egitpython-developers/GitPython#2229\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify detached HEAD access and isolate test branch state by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2231\"\u003egitpython-developers/GitPython#2231\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject submodule move destinations through intermediate symlinks by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2232\"\u003egitpython-developers/GitPython#2232\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: validate checkout positional reference options by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2233\"\u003egitpython-developers/GitPython#2233\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix timeout child-process lookup on non-GNU systems by \u003ca href=\"https://github.com/aprylewu\"\u003e\u003ccode\u003e@​aprylewu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2236\"\u003egitpython-developers/GitPython#2236\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePreserve implicit boolean config keys by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2238\"\u003egitpython-developers/GitPython#2238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject comments after implicit boolean config keys by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2239\"\u003egitpython-developers/GitPython#2239\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix case-insensitive Git config name matching by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2241\"\u003egitpython-developers/GitPython#2241\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMove project metadata to pyproject.toml by \u003ca href=\"https://github.com/mwtoews\"\u003e\u003ccode\u003e@​mwtoews\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2242\"\u003egitpython-developers/GitPython#2242\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMove [doc] extra to a PEP 735 dependency group; add uv-sync CI check by \u003ca href=\"https://github.com/mwtoews\"\u003e\u003ccode\u003e@​mwtoews\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2243\"\u003egitpython-developers/GitPython#2243\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: strip inline config comments the way git does by \u003ca href=\"https://github.com/rawsun007\"\u003e\u003ccode\u003e@​rawsun007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2245\"\u003egitpython-developers/GitPython#2245\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop Python 3.7 by \u003ca href=\"https://github.com/mwtoews\"\u003e\u003ccode\u003e@​mwtoews\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2246\"\u003egitpython-developers/GitPython#2246\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: preserve positional operands in high-level Git commands by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2247\"\u003egitpython-developers/GitPython#2247\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003esubmodule: option to update without fetching by \u003ca href=\"https://github.com/jeffro256\"\u003e\u003ccode\u003e@​jeffro256\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2244\"\u003egitpython-developers/GitPython#2244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebump minor version to indicate drop of python 3.7 support by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2248\"\u003egitpython-developers/GitPython#2248\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: skip a UTF-8 BOM when reading config files by \u003ca href=\"https://github.com/geek-alpha\"\u003e\u003ccode\u003e@​geek-alpha\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2249\"\u003egitpython-developers/GitPython#2249\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/gitpython-developers/GitPython/blob/main/doc/source/changes.rst\"\u003egitpython's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.2.1\u003c/h1\u003e\n\u003cp\u003eSecurity fixes for\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-83vg-56qc-22m7\"\u003ehttps://github.com/gitpython-developers/GitPython/security/advisories/GHSA-83vg-56qc-22m7\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf you can, also try and provide feedback on the upcoming v4 branch\n\u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2274\"\u003egitpython-developers/GitPython#2274\u003c/a\u003e - patches welcome.\u003c/p\u003e\n\u003cp\u003eSee the following for all changes.\n\u003ca href=\"https://github.com/gitpython-developers/GitPython/releases/tag/3.2.1\"\u003ehttps://github.com/gitpython-developers/GitPython/releases/tag/3.2.1\u003c/a\u003e\u003c/p\u003e\n\u003ch1\u003e3.2.0\u003c/h1\u003e\n\u003cp\u003eDrops support for Python 3.7 (5 years after its EOL).\u003c/p\u003e\n\u003cp\u003eSecurity fixes for\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate the pure-Python \u003ccode\u003eGitDB\u003c/code\u003e object database backend due to security and\nperformance issues. Selecting it or a subclass through \u003ccode\u003eodbt\u003c/code\u003e now emits a\n\u003ccode\u003eDeprecationWarning\u003c/code\u003e. Remove \u003ccode\u003eodbt=GitDB\u003c/code\u003e to use \u003ccode\u003eGitCmdObjectDB\u003c/code\u003e, the\nexisting default, or select \u003ccode\u003eodbt=GitCmdObjectDB\u003c/code\u003e explicitly. The \u003ccode\u003egitdb\u003c/code\u003e\npackage remains a dependency for shared types and utilities.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-gq48-pqfc-9p58\"\u003ehttps://github.com/gitpython-developers/GitPython/security/advisories/GHSA-gq48-pqfc-9p58\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-23mf-xhv8-69c2\"\u003ehttps://github.com/gitpython-developers/GitPython/security/advisories/GHSA-23mf-xhv8-69c2\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-f9j4-qggq-h239\"\u003ehttps://github.com/gitpython-developers/GitPython/security/advisories/GHSA-f9j4-qggq-h239\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-w8jc-g24h-crhw\"\u003ehttps://github.com/gitpython-developers/GitPython/security/advisories/GHSA-w8jc-g24h-crhw\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-m64x-33q8-m5h7\"\u003ehttps://github.com/gitpython-developers/GitPython/security/advisories/GHSA-m64x-33q8-m5h7\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-fx3j-rwgx-fr94\"\u003ehttps://github.com/gitpython-developers/GitPython/security/advisories/GHSA-fx3j-rwgx-fr94\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf you can, also try and provide feedback on the upcoming v4 branch\n\u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2274\"\u003egitpython-developers/GitPython#2274\u003c/a\u003e - patches welcome.\u003c/p\u003e\n\u003cp\u003eSee the following for all changes.\n\u003ca href=\"https://github.com/gitpython-developers/GitPython/releases/tag/3.2.0\"\u003ehttps://github.com/gitpython-developers/GitPython/releases/tag/3.2.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/gitpython-developers/GitPython/commit/c179357b38a8962f1c8e33153ac58b5ac0e6e96a\"\u003e\u003ccode\u003ec179357\u003c/code\u003e\u003c/a\u003e prepare changelog prior to release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/97eadb888d2f99567e3113f4e455be4ca128f697\"\u003e\u003ccode\u003e97eadb8\u003c/code\u003e\u003c/a\u003e fix(submodule): validate destinations before mutation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/6a7180a9dfcb276755a8af99dd78155f775a6b14\"\u003e\u003ccode\u003e6a7180a\u003c/code\u003e\u003c/a\u003e prepare for next release, v3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/0b64501a081de8018983c3f464c16b36ddd64353\"\u003e\u003ccode\u003e0b64501\u003c/code\u003e\u003c/a\u003e refactor(db): deprecate the pure-Python \u003ccode\u003eGitDB\u003c/code\u003e backend\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/9349ff58ee00c9fb14d515c8e693f33b2144b238\"\u003e\u003ccode\u003e9349ff5\u003c/code\u003e\u003c/a\u003e fix(repo): preserve literal separate Git directory paths\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/8290c98d35465a38090cdcc1b17be69967092a15\"\u003e\u003ccode\u003e8290c98\u003c/code\u003e\u003c/a\u003e fix: bound actor and date parsing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/9ad28cc4c7176d22cd6181d69805058a719dd03b\"\u003e\u003ccode\u003e9ad28cc\u003c/code\u003e\u003c/a\u003e fix: complete safety checks in Git command wrappers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/ce2093b9569242c35afc7433355df9766c7ac8d3\"\u003e\u003ccode\u003ece2093b\u003c/code\u003e\u003c/a\u003e bump minor version to indicate drop of python 3.7 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/dafafff7e5438879d0167c17008342231f7af314\"\u003e\u003ccode\u003edafafff\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/issues/2247\"\u003e#2247\u003c/a\u003e from gitpython-developers/pos-arg-sanitization\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/790bb3164948625ffb043d2a162425d55923fe9a\"\u003e\u003ccode\u003e790bb31\u003c/code\u003e\u003c/a\u003e fix(remote): reject option-shaped pull operands\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gitpython-developers/GitPython/compare/3.1.62...3.2.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `starlette` from 1.6.0 to 1.9.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/starlette/releases\"\u003estarlette's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.9.0\u003c/h2\u003e\n\u003cp\u003eThis release streams \u003ccode\u003eTestClient\u003c/code\u003e response bodies, so \u003ccode\u003eclient.stream()\u003c/code\u003e returns before the application finishes. It also escapes path delimiters when building URLs, matches host names case-insensitively, and keeps every existing \u003ccode\u003eVary\u003c/code\u003e header.\u003c/p\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStream \u003ccode\u003eTestClient\u003c/code\u003e response bodies, so \u003ccode\u003eclient.stream()\u003c/code\u003e returns before the application finishes. Closing an unfinished streamed response now cancels the application \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3491\"\u003e#3491\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePercent-encode \u003ccode\u003e?\u003c/code\u003e, \u003ccode\u003e#\u003c/code\u003e, \u003ccode\u003e\\\u003c/code\u003e and a leading \u003ccode\u003e//\u003c/code\u003e in the request path when building \u003ccode\u003erequest.url\u003c/code\u003e, and \u003ccode\u003e\\\u003c/code\u003e and a leading \u003ccode\u003e//\u003c/code\u003e in \u003ccode\u003eurl_path_for\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3671\"\u003e#3671\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUse the byte length for \u003ccode\u003eContent-Length\u003c/code\u003e when the response body is a typed or multidimensional \u003ccode\u003ememoryview\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3622\"\u003e#3622\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eInclude \u003ccode\u003eHEAD\u003c/code\u003e in the \u003ccode\u003eAllow\u003c/code\u003e header of \u003ccode\u003eHTTPEndpoint\u003c/code\u003e 405 responses when \u003ccode\u003eGET\u003c/code\u003e is defined \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3585\"\u003e#3585\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eMatch host names case-insensitively in \u003ccode\u003eHost\u003c/code\u003e routing and \u003ccode\u003eTrustedHostMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3542\"\u003e#3542\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePreserve every existing \u003ccode\u003eVary\u003c/code\u003e header in \u003ccode\u003eMutableHeaders.add_vary_header()\u003c/code\u003e, used by \u003ccode\u003eGZipMiddleware\u003c/code\u003e and \u003ccode\u003eSessionMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3675\"\u003e#3675\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull changelog:\u003c/strong\u003e \u003ca href=\"https://github.com/Kludex/starlette/compare/1.8.0...1.9.0\"\u003e1.8.0...1.9.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 1.8.0\u003c/h2\u003e\n\u003cp\u003eThis release adds HTTP 103 Early Hints, preserves response trailers through \u003ccode\u003eGZipMiddleware\u003c/code\u003e, and stops \u003ccode\u003eFileResponse\u003c/code\u003e transfers when clients disconnect. Starlette now requires Python 3.11.\u003c/p\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eRequest.send_early_hints()\u003c/code\u003e for HTTP 103 Early Hints through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3435\"\u003e#3435\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Python 3.11 or later, dropping support for Python 3.10 \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3592\"\u003e#3592\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eExclude native gRPC media types (\u003ccode\u003eapplication/grpc\u003c/code\u003e and \u003ccode\u003eapplication/grpc+...\u003c/code\u003e) from \u003ccode\u003eGZipMiddleware\u003c/code\u003e compression by default \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSend \u003ccode\u003ehttp.response.start\u003c/code\u003e immediately in \u003ccode\u003eGZipMiddleware\u003c/code\u003e for responses with an existing \u003ccode\u003eContent-Encoding\u003c/code\u003e, status \u003ccode\u003e206\u003c/code\u003e, or an excluded content type, instead of waiting for the first body chunk \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3631\"\u003e#3631\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eResolve the multipart charset once per request instead of once per field \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3618\"\u003e#3618\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve response trailers through \u003ccode\u003eGZipMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop \u003ccode\u003eFileResponse\u003c/code\u003e transfers when the client disconnects \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3523\"\u003e#3523\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop multipart range responses when the file ends before a range is complete, instead of looping forever \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3583\"\u003e#3583\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore \u003ccode\u003eRange\u003c/code\u003e when \u003ccode\u003eIf-Range\u003c/code\u003e contains a weak ETag \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3567\"\u003e#3567\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eInclude \u003ccode\u003eAllow: GET, HEAD\u003c/code\u003e in \u003ccode\u003eStaticFiles\u003c/code\u003e \u003ccode\u003e405\u003c/code\u003e responses \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3640\"\u003e#3640\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eClose \u003ccode\u003eRequest.stream()\u003c/code\u003e generators deterministically, avoiding \u0026quot;Exception ignored\u0026quot; errors with stacked \u003ccode\u003eBaseHTTPMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3628\"\u003e#3628\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eVary: Cookie\u003c/code\u003e when \u003ccode\u003eSession.pop()\u003c/code\u003e removes an existing key \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3186\"\u003e#3186\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eEmit \u003ccode\u003eMax-Age=0\u003c/code\u003e on the session cookie when \u003ccode\u003eSessionMiddleware\u003c/code\u003e uses \u003ccode\u003emax_age=0\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3651\"\u003e#3651\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBracket IPv6 hostnames in \u003ccode\u003eURL.replace()\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3617\"\u003e#3617\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull changelog:\u003c/strong\u003e \u003ca href=\"https://github.com/Kludex/starlette/compare/1.7.0...1.8.0\"\u003e1.7.0...1.8.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 1.7.0\u003c/h2\u003e\n\u003cp\u003eThis release adds experimental OpenTelemetry tracing, HTTP \u003ccode\u003eQUERY\u003c/code\u003e support, and response trailers in \u003ccode\u003eTestClient\u003c/code\u003e. Starlette now requires AnyIO 4.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\n\u003ccode\u003eOpenTelemetryMiddleware\u003c/code\u003e is experimental. Its API and emitted telemetry may change in minor releases without a deprecation period.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/starlette/blob/main/docs/release-notes.md\"\u003estarlette's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.9.0 (October 18, 2026)\u003c/h2\u003e\n\u003ch4\u003eChanged\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eStream \u003ccode\u003eTestClient\u003c/code\u003e response bodies, so \u003ccode\u003eclient.stream()\u003c/code\u003e returns before the application finishes. Closing an unfinished streamed response now cancels the application \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3491\"\u003e#3491\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixed\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePercent-encode \u003ccode\u003e?\u003c/code\u003e, \u003ccode\u003e#\u003c/code\u003e, \u003ccode\u003e\\\u003c/code\u003e and a leading \u003ccode\u003e//\u003c/code\u003e in the request path when building \u003ccode\u003erequest.url\u003c/code\u003e, and \u003ccode\u003e\\\u003c/code\u003e and a leading \u003ccode\u003e//\u003c/code\u003e in \u003ccode\u003eurl_path_for\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3671\"\u003e#3671\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUse the byte length for \u003ccode\u003eContent-Length\u003c/code\u003e when the response body is a typed or multidimensional \u003ccode\u003ememoryview\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3622\"\u003e#3622\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eInclude \u003ccode\u003eHEAD\u003c/code\u003e in the \u003ccode\u003eAllow\u003c/code\u003e header of \u003ccode\u003eHTTPEndpoint\u003c/code\u003e 405 responses when \u003ccode\u003eGET\u003c/code\u003e is defined \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3585\"\u003e#3585\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eMatch host names case-insensitively in \u003ccode\u003eHost\u003c/code\u003e routing and \u003ccode\u003eTrustedHostMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3542\"\u003e#3542\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePreserve every existing \u003ccode\u003eVary\u003c/code\u003e header in \u003ccode\u003eMutableHeaders.add_vary_header()\u003c/code\u003e, used by \u003ccode\u003eGZipMiddleware\u003c/code\u003e and \u003ccode\u003eSessionMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3675\"\u003e#3675\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.8.0 (October 13, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release drops Python 3.10 support and adds HTTP 103 Early Hints.\u003c/p\u003e\n\u003ch4\u003eAdded\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eRequest.send_early_hints()\u003c/code\u003e for HTTP 103 Early Hints through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3435\"\u003e#3435\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanged\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Python 3.11 or later, dropping support for Python 3.10 \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3592\"\u003e#3592\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eExclude native gRPC media types (\u003ccode\u003eapplication/grpc\u003c/code\u003e and \u003ccode\u003eapplication/grpc+...\u003c/code\u003e) from \u003ccode\u003eGZipMiddleware\u003c/code\u003e compression by default \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSend \u003ccode\u003ehttp.response.start\u003c/code\u003e immediately in \u003ccode\u003eGZipMiddleware\u003c/code\u003e for responses with an existing \u003ccode\u003eContent-Encoding\u003c/code\u003e, status \u003ccode\u003e206\u003c/code\u003e, or an excluded content type, instead of waiting for the first body chunk \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3631\"\u003e#3631\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eResolve the multipart charset once per request instead of once per field \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3618\"\u003e#3618\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixed\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve response trailers through \u003ccode\u003eGZipMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop \u003ccode\u003eFileResponse\u003c/code\u003e transfers when the client disconnects \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3523\"\u003e#3523\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop multipart range responses when the file ends before a range is complete, instead of looping forever \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3583\"\u003e#3583\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore \u003ccode\u003eRange\u003c/code\u003e when \u003ccode\u003eIf-Range\u003c/code\u003e contains a weak ETag \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3567\"\u003e#3567\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eInclude \u003ccode\u003eAllow: GET, HEAD\u003c/code\u003e in \u003ccode\u003eStaticFiles\u003c/code\u003e \u003ccode\u003e405\u003c/code\u003e responses \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3640\"\u003e#3640\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eClose \u003ccode\u003eRequest.stream()\u003c/code\u003e generators deterministically, avoiding \u0026quot;Exception ignored\u0026quot; errors with stacked \u003ccode\u003eBaseHTTPMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3628\"\u003e#3628\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eVary: Cookie\u003c/code\u003e when \u003ccode\u003eSession.pop()\u003c/code\u003e removes an existing key \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3186\"\u003e#3186\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eEmit \u003ccode\u003eMax-Age=0\u003c/code\u003e on the session cookie when \u003ccode\u003eSessionMiddleware\u003c/code\u003e uses \u003ccode\u003emax_age=0\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3651\"\u003e#3651\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBracket IPv6 hostnames in \u003ccode\u003eURL.replace()\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3617\"\u003e#3617\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.7.0 (September 23, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release adds experimental OpenTelemetry tracing and requires AnyIO 4.\u003c/p\u003e\n\u003cp\u003e!!! warning \u0026quot;OpenTelemetryMiddleware is experimental\u0026quot;\nIts API and emitted telemetry may change in minor releases without a deprecation period\n\u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3574\"\u003e#3574\u003c/a\u003e.\u003c/p\u003e\n\u003ch4\u003eAdded\u003c/h4\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/starlette/commit/1840c9dd3bda5bd0beb5a26b2a7bc797a0f91a2a\"\u003e\u003ccode\u003e1840c9d\u003c/code\u003e\u003c/a\u003e Version 1.9.0 (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3676\"\u003e#3676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/750dc33efe2a3076fc6a69235b02a331c467bc09\"\u003e\u003ccode\u003e750dc33\u003c/code\u003e\u003c/a\u003e Preserve all \u003ccode\u003eVary\u003c/code\u003e headers in \u003ccode\u003eMutableHeaders.add_vary_header\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3675\"\u003e#3675\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/414af4f6b95cbf1cbc43746dc84058a3394e989c\"\u003e\u003ccode\u003e414af4f\u003c/code\u003e\u003c/a\u003e Remove unmaintained packages from the third-party packages page (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3674\"\u003e#3674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/d4df01aab4d1a71c8b8db010843f6453efaaaf7c\"\u003e\u003ccode\u003ed4df01a\u003c/code\u003e\u003c/a\u003e Add adminsite to the third-party packages (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3654\"\u003e#3654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/1766228b4eb5462efd552f3364656e1e0a5b0180\"\u003e\u003ccode\u003e1766228\u003c/code\u003e\u003c/a\u003e Match host names case-insensitively in \u003ccode\u003eHost\u003c/code\u003e routing and `TrustedHostMiddlew...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/a579222b161e5407cd311c32648ed7c845bda4a4\"\u003e\u003ccode\u003ea579222\u003c/code\u003e\u003c/a\u003e Include \u003ccode\u003eHEAD\u003c/code\u003e in the \u003ccode\u003eAllow\u003c/code\u003e header of \u003ccode\u003eHTTPEndpoint\u003c/code\u003e 405 responses (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3585\"\u003e#3585\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/6b11cd7df52dc80a5565ccde79d319729d84e92c\"\u003e\u003ccode\u003e6b11cd7\u003c/code\u003e\u003c/a\u003e Honor streaming responses in TestClient (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3491\"\u003e#3491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/b7901fb908f0c6c3b8b6e495517cea6b2e77e66b\"\u003e\u003ccode\u003eb7901fb\u003c/code\u003e\u003c/a\u003e Use byte length for typed \u003ccode\u003ememoryview\u003c/code\u003e response bodies (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3622\"\u003e#3622\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/3214cd069e1b3c11628d172df387ded973934db2\"\u003e\u003ccode\u003e3214cd0\u003c/code\u003e\u003c/a\u003e Escape path delimiters and leading \u003ccode\u003e//\u003c/code\u003e when building URLs (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3671\"\u003e#3671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/7b2948fe7b7fff28bb018607d54cd4dfa518910e\"\u003e\u003ccode\u003e7b2948f\u003c/code\u003e\u003c/a\u003e Version 1.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/starlette/compare/1.6.0...1.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyjwt` from 2.13.0 to 2.15.1\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.15.1\u003c/h2\u003e\n\u003cp\u003eSee the \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/2.15.1/CHANGELOG.rst\"\u003e2.15.1 changelog\u003c/a\u003e for complete release details.\u003c/p\u003e\n\u003ch2\u003e2.15.0\u003c/h2\u003e\n\u003cp\u003eSee the \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/2.15.0/CHANGELOG.rst\"\u003e2.15.0 changelog\u003c/a\u003e for complete release details.\u003c/p\u003e\n\u003ch2\u003e2.14.0\u003c/h2\u003e\n\u003cp\u003eSee the \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/2.14.0/CHANGELOG.rst\"\u003e2.14.0 changelog\u003c/a\u003e for the complete release details and related security advisories.\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.15.1 \u0026lt;https://github.com/jpadilla/pyjwt/compare/2.15.0...2.15.1\u0026gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Accept trailing Base64URL ``=`` padding when decoding JWS segments, so\n  tokens issued by AWS ALB and similar systems verify instead of raising\n  ``DecodeError: Invalid crypto padding``. Non-alphabet junk such as\n  ``!!!!`` remains rejected (`[#1209](https://github.com/jpadilla/pyjwt/issues/1209) \u0026lt;https://github.com/jpadilla/pyjwt/issues/1209\u0026gt;`__).\n\u003ch2\u003e\u003ccode\u003ev2.15.0 \u0026amp;lt;https://github.com/jpadilla/pyjwt/compare/2.14.0...2.15.0\u0026amp;gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eSecurity\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWrap recursion errors from deeply nested JWT payloads in \u003ccode\u003eDecodeError\u003c/code\u003e\ninstead of exposing a raw \u003ccode\u003eRecursionError\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAdded\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Support Python 3.15 by @kytta in `[#1202](https://github.com/jpadilla/pyjwt/issues/1202) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1202\u0026gt;`__\n\u003cp\u003eChanged\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eJWKSetCache\u003c/code\u003e now stores the parsed \u003ccode\u003ePyJWKSet\u003c/code\u003e rather than the raw JWKS\npayload, so a cache hit no longer re-parses every key. \u003ccode\u003eJWKSetCache.put()\u003c/code\u003e\naccepts either form and raises \u003ccode\u003ePyJWKSetError\u003c/code\u003e for anything else. As a\nresult, \u003ccode\u003ePyJWKClient.get_jwk_set()\u003c/code\u003e returns the same \u003ccode\u003ePyJWKSet\u003c/code\u003e instance\nfor as long as it stays cached, rather than a freshly built one per call in\n\u003ccode\u003e[#1208](https://github.com/jpadilla/pyjwt/issues/1208) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1208\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ePyJWKClient.fetch_data()\u003c/code\u003e now raises\n\u003ccode\u003ePyJWKClientError(\u0026quot;The JWKS endpoint did not return a JSON object\u0026quot;)\u003c/code\u003e when\nthe endpoint response is not a JSON object, instead of returning it for\n\u003ccode\u003eget_jwk_set()\u003c/code\u003e to reject. Callers reaching the JWKS through\n\u003ccode\u003eget_jwk_set()\u003c/code\u003e see the same error as before in\n\u003ccode\u003e[#1208](https://github.com/jpadilla/pyjwt/issues/1208) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1208\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Return cached ``PyJWKSet`` values from ``PyJWKClient.get_jwk_set()`` instead\n  of raising ``PyJWKClientError(\u0026quot;The JWKS endpoint did not return a JSON\n  object\u0026quot;)``. ``JWKSetCache.put()`` documents ``PyJWKSet`` as the cached value,\n  so callers pre-populating the cache to avoid a network round-trip could not\n  read it back in `[#914](https://github.com/jpadilla/pyjwt/issues/914) \u0026lt;https://github.com/jpadilla/pyjwt/issues/914\u0026gt;`__ and\n  `[#1208](https://github.com/jpadilla/pyjwt/issues/1208) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1208\u0026gt;`__\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/7d5ef55e42ce42221f58dc49943e92ccad1fa66a\"\u003e\u003ccode\u003e7d5ef55\u003c/code\u003e\u003c/a\u003e chore: prepare 2.15.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/7bf32526738fe837387bdedd4849a4a525c33a79\"\u003e\u003ccode\u003e7bf3252\u003c/code\u003e\u003c/a\u003e Accept canonical Base64URL padding in JWT segments (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1216\"\u003e#1216\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/1d41a6478e1562e68ff667fcd703356acf085f68\"\u003e\u003ccode\u003e1d41a64\u003c/code\u003e\u003c/a\u003e chore: prepare 2.15.0 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/9bc06658f875b9b40091539140bbbdc4639161c3\"\u003e\u003ccode\u003e9bc0665\u003c/code\u003e\u003c/a\u003e fix: make recursive payload tests deterministic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/5fde08a6cf906aa7698de2d6391d88b73006b17b\"\u003e\u003ccode\u003e5fde08a\u003c/code\u003e\u003c/a\u003e fix: normalize recursive JWT payload errors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/171062d2d734315272a901100aa4b109f2fc3c19\"\u003e\u003ccode\u003e171062d\u003c/code\u003e\u003c/a\u003e utils: mention bytes in force_bytes type error (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1173\"\u003e#1173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/c9d4d5375bf464ef363506fed9eb6e7f33217ab6\"\u003e\u003ccode\u003ec9d4d53\u003c/code\u003e\u003c/a\u003e docs/conf: drop duplicate 'and' from read() docstring (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1174\"\u003e#1174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/2763752196113e1473b0ed7905aa6034aedfbe53\"\u003e\u003ccode\u003e2763752\u003c/code\u003e\u003c/a\u003e Add support for Python 3.15 (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1202\"\u003e#1202\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/4adcd02722f5011c60079d3978dfc167b9a8eaa5\"\u003e\u003ccode\u003e4adcd02\u003c/code\u003e\u003c/a\u003e Catch http.client.HTTPException in PyJWKClient.fetch_data (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1201\"\u003e#1201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/9e501d993b4d3e7dba14bdb1722b1d993ac75097\"\u003e\u003ccode\u003e9e501d9\u003c/code\u003e\u003c/a\u003e fix: correct docstring typo in _validate_jti (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1179\"\u003e#1179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.13.0...2.15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-gitlab` from 8.3.0 to 8.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-gitlab/python-gitlab/releases\"\u003epython-gitlab's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev8.6.0 (2026-09-28)\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eThis release is published under the LGPL-3.0-or-later License.\u003c/em\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eCOPYING\u003c/strong\u003e: Use the combined LGPGL and GPL license text. (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/b6e65dd304fb4f6b7f8f8e98770996734f516ed5\"\u003e\u003ccode\u003eb6e65dd\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003erenovate\u003c/strong\u003e: Add a 7-day cooldown for updates (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/6bb4216c48bdd58f28e875dd2c5da59871b83d34\"\u003e\u003ccode\u003e6bb4216\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ehooks\u003c/strong\u003e: Add all available project hook attributes (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/f57c33b8463d857c1494a0a7ebe4dada4af8a328\"\u003e\u003ccode\u003ef57c33b\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTesting\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDon't delete source branch by default for projects (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/aff7954f6440c9b2c82c9c2321bd5451770edfb6\"\u003e\u003ccode\u003eaff7954\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eDetailed Changes\u003c/strong\u003e: \u003ca href=\"https://github.com/python-gitlab/python-gitlab/compare/v8.5.0...v8.6.0\"\u003ev8.5.0...v8.6.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev8.5.0 (2026-07-28)\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eThis release is published under the LGPL-3.0-or-later License.\u003c/em\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTypo (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/72134f5369cd4568a2374f25543071245375d26e\"\u003e\u003ccode\u003e72134f5\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi\u003c/strong\u003e: Allow ProjectMergeRequestDiscussionNote.resolved to be updated (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/b411e5a20a4370a7c1b6968c85251b57785a9d03\"\u003e\u003ccode\u003eb411e5a\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eclient\u003c/strong\u003e: Retry fetching server version after an unknown result (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/046fbac664e033a0a5a65417bfd229e91a1fd09f\"\u003e\u003ccode\u003e046fbac\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContinuous Integration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRun the pre-commit rst checks in the CI (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/a9c5d17d3ab57d448be6dd5eac3b7ec9eb680261\"\u003e\u003ccode\u003ea9c5d17\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eCorrect error with backticks (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/e57559e8c1bea1ba580074e83d21072d9b80d582\"\u003e\u003ccode\u003ee57559e\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003ediscussions\u003c/strong\u003e: Add example of resolving a single project merge request discussion note (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/2ef6452b9471c1a421ac8addc06eb3b5052289e0\"\u003e\u003ccode\u003e2ef6452\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi\u003c/strong\u003e: Add ListMixin to remaining *DiscussionNoteManagers (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/0e2347cc181214bd3d825eac3cc94239e6cd2ef5\"\u003e\u003ccode\u003e0e2347c\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eclient\u003c/strong\u003e: Additionally handle retries for request timeouts (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/4e32439deaa9516a48becf9a7fc9cdb7723207c6\"\u003e\u003ccode\u003e4e32439\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-gitlab/python-gitlab/blob/main/CHANGELOG.md\"\u003epython-gitlab's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev8.6.0 (2026-09-28)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eCOPYING\u003c/strong\u003e: Use the combined LGPGL and GPL license text.\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/b6e65dd304fb4f6b7f8f8e98770996734f516ed5\"\u003e\u003ccode\u003eb6e65dd\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003erenovate\u003c/strong\u003e: Add a 7-day cooldown for updates\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/6bb4216c48bdd58f28e875dd2c5da59871b83d34\"\u003e\u003ccode\u003e6bb4216\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ehooks\u003c/strong\u003e: Add all available project hook attributes\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/f57c33b8463d857c1494a0a7ebe4dada4af8a328\"\u003e\u003ccode\u003ef57c33b\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTesting\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDon't delete source branch by default for projects\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/aff7954f6440c9b2c82c9c2321bd5451770edfb6\"\u003e\u003ccode\u003eaff7954\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev8.5.0 (2026-07-28)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTypo\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/72134f5369cd4568a2374f25543071245375d26e\"\u003e\u003ccode\u003e72134f5\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi\u003c/strong\u003e: Allow ProjectMergeRequestDiscussionNote.resolved to be updated\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/b411e5a20a4370a7c1b6968c85251b57785a9d03\"\u003e\u003ccode\u003eb411e5a\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eclient\u003c/strong\u003e: Retry fetching server version after an unknown result\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/046fbac664e033a0a5a65417bfd229e91a1fd09f\"\u003e\u003ccode\u003e046fbac\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContinuous Integration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRun the pre-commit rst checks in the CI\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/a9c5d17d3ab57d448be6dd5eac3b7ec9eb680261\"\u003e\u003ccode\u003ea9c5d17\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eCorrect error with backticks\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/e57559e8c1bea1ba580074e83d21072d9b80d582\"\u003e\u003ccode\u003ee57559e\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003ediscussions\u003c/strong\u003e: Add example of resolving a single project merge request discussion note\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/2ef6452b9471c1a421ac8addc06eb3b5052289e0\"\u003e\u003ccode\u003e2ef6452\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi\u003c/strong\u003e: Add ListMixin to remaining *DiscussionNoteManagers\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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-gitlab/python-gitlab/commit/51eb17e6e67a25157e04b0abc649221bd8ecc7fe\"\u003e\u003ccode\u003e51eb17e\u003c/code\u003e\u003c/a\u003e chore: release v8.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/ce92c8fd96b4babb830853d04e5c86a6edf98202\"\u003e\u003ccode\u003ece92c8f\u003c/code\u003e\u003c/a\u003e chore(deps): update all non-major dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/a3e37132d0abe8410d35c393fa4a49d58799ca2d\"\u003e\u003ccode\u003ea3e3713\u003c/code\u003e\u003c/a\u003e chore(deps): update gitlab/gitlab-ee docker tag to v19.3.2-ee.0 (\u003ca href=\"https://redirect.github.com/python-gitlab/python-gitlab/issues/3448\"\u003e#3448\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/a47b5e0b2b54695c9e3d7d3ed1ab03b300f48d28\"\u003e\u003ccode\u003ea47b5e0\u003c/code\u003e\u003c/a\u003e chore(deps): update all non-major dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/c58ca36b0012957dd7a524afc05f0b04acbfb323\"\u003e\u003ccode\u003ec58ca36\u003c/code\u003e\u003c/a\u003e chore(deps): update pre-commit hook pycqa/isort to v9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/50b7c1e2e1cc859207fbf3dbea62023f7c3dd362\"\u003e\u003ccode\u003e50b7c1e\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency isort to v9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/dc9afed2fd6a2a1b6968d0adfa45e36919281d26\"\u003e\u003ccode\u003edc9afed\u003c/code\u003e\u003c/a\u003e chore(deps): update all non-major dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/c56d5fdf55b51000ca755c345c809ccb1ffcde64\"\u003e\u003ccode\u003ec56d5fd\u003c/code\u003e\u003c/a\u003e chore(deps): update gitlab/gitlab-ee docker tag to v19.3.1-ee.0 (\u003ca href=\"https://redirect.github.com/python-gitlab/python-gitlab/issues/3443\"\u003e#3443\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/30326676a0515511f5cf6423a9d8b8fc14f9e1ab\"\u003e\u003ccode\u003e3032667\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency types-setuptools to v84\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/f4a643fab943bf7316544cb1641887b3551bfd5a\"\u003e\u003ccode\u003ef4a643f\u003c/code\u003e\u003c/a\u003e chore(deps): update pre-commit hook maxbrunet/pre-commit-renovate to v44\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-gitlab/python-gitlab/compare/v8.3.0...v8.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `starlette-context` from 0.3.6 to 0.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tomwojcik/starlette-context/releases\"\u003estarlette-context's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eHeaderKeys\u003c/code\u003e enum \u003ccode\u003estr()\u003c/code\u003e behavior inconsistency across Python versions (\u003ca href=\"https://redirect.github.com/tomwojcik/starlette-context/pull/192\"\u003e#192\u003c/a\u003e). On Python 3.11+, \u003ccode\u003estr(HeaderKeys.api_key)\u003c/code\u003e returned \u003ccode\u003e\u0026quot;HeaderKeys.api_key\u0026quot;\u003c/code\u003e instead of \u003ccode\u003e\u0026quot;X-API-Key\u0026quot;\u003c/code\u003e. Now uses \u003ccode\u003eStrEnum\u003c/code\u003e for consistent behavior across all supported Python versions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13 and 3.14\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9. Now only 3.10+ is supported\u003c/li\u003e\n\u003cli\u003eMigrate from Poetry to \u003ca href=\"https://docs.astral.sh/uv/\"\u003euv\u003c/a\u003e as the package manager and build tool\u003c/li\u003e\n\u003cli\u003eSwitch build backend from poetry-core to hatchling\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eassert\u003c/code\u003e with \u003ccode\u003eConfigurationError\u003c/code\u003e in \u003ccode\u003ePlugin.process_request\u003c/code\u003e for clearer error messages\u003c/li\u003e\n\u003cli\u003eReplace Black with \u003ccode\u003eruff format\u003c/code\u003e for code formatting\u003c/li\u003e\n\u003cli\u003eReplace deprecated \u003ccode\u003eHTTP_422_UNPROCESSABLE_ENTITY\u003c/code\u003e with \u003ccode\u003eHTTP_422_UNPROCESSABLE_CONTENT\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.8. Now only 3.9+ is supported ( \u003ca href=\"https://redirect.github.com/tomwojcik/starlette-context/pull/152/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711R29\"\u003etomwojcik/starlette-context#152\u003c/a\u003e )\u003c/li\u003e\n\u003cli\u003eDrop support for Starlette versions below 0.27.0 ( released May 16, 2023) ( \u003ca href=\"https://redirect.github.com/tomwojcik/starlette-context/pull/152/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711R30\"\u003etomwojcik/starlette-context#152\u003c/a\u003e )\u003c/li\u003e\n\u003cli\u003eDrop \u003ccode\u003eContextMiddleware\u003c/code\u003e deprecation warning as Starlette no longer plans to deprecate it ( \u003ca href=\"https://github.com/encode/starlette/discussions/2160#discussioncomment-6053386\"\u003ehttps://github.com/encode/starlette/discussions/2160#discussioncomment-6053386\u003c/a\u003e )\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003estarlette-context\u003c/code\u003e potentially breaking if \u003ccode\u003eContextMiddleware\u003c/code\u003e is used along with \u003ccode\u003estarlette\u0026gt;=0.41.3\u003c/code\u003e ( \u003ca href=\"https://redirect.github.com/tomwojcik/starlette-context/issues/151\"\u003etomwojcik/starlette-context#151\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/tomwojcik/starlette-context/commit/9ac36342c2c111b946377f734f0fa753fe4d1a0b\"\u003e\u003ccode\u003e9ac3634\u003c/code\u003e\u003c/a\u003e Bump version to 0.5.1, update changelog and authors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/0ee5c58e8e9479dcf5a6e56ab9e9952a9edd723e\"\u003e\u003ccode\u003e0ee5c58\u003c/code\u003e\u003c/a\u003e improve codecov after \u003ca href=\"https://redirect.github.com/tomwojcik/starlette-context/pull/192\"\u003etomwojcik/starlette-context#192\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/ad81772fda4ec04a1b53f711b28c8b99eced512e\"\u003e\u003ccode\u003ead81772\u003c/code\u003e\u003c/a\u003e Added test for consistent enum behavior\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/410805d7f71d5e43c7798df12f5cb0e31f2c4bdd\"\u003e\u003ccode\u003e410805d\u003c/code\u003e\u003c/a\u003e Make pre-3.11 behavior with post-3.11\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/0c5470f00816dd9bfd4ea1330c8d748697676c9d\"\u003e\u003ccode\u003e0c5470f\u003c/code\u003e\u003c/a\u003e improve docs and tests post \u003ca href=\"https://github.com/tomwojcik/starlette-context/pu\"\u003ehttps://github.com/tomwojcik/starlette-context/pu\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/bc0a78f33e9573c83e4639579b04f6cece5ba524\"\u003e\u003ccode\u003ebc0a78f\u003c/code\u003e\u003c/a\u003e Add background task context tests and update documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/2ed7b7418f2c45a598307d86372b340ccf8e866a\"\u003e\u003ccode\u003e2ed7b74\u003c/code\u003e\u003c/a\u003e Bump astral-sh/setup-uv from 5 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/e0e57ff6e2cbaa0853af9e442ce74fd2297d08ee\"\u003e\u003ccode\u003ee0e57ff\u003c/code\u003e\u003c/a\u003e Only upload codecov for latest Python/Starlette matrix entry\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/cde22598aa17a6e9bbd1208c63f88f50792e5300\"\u003e\u003ccode\u003ecde2259\u003c/code\u003e\u003c/a\u003e Limit sdist contents to package source and essential files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/af8d901ff132857b5b82f3dbb4b3c2d76cfdabab\"\u003e\u003ccode\u003eaf8d901\u003c/code\u003e\u003c/a\u003e Fix documentation examples and modernize project tooling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tomwojcik/starlette-context/compare/v0.3.6...v0.5.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.52.4 to 0.54.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.54.0\u003c/h2\u003e\n\u003ch2\u003e📨 Send metadata after the response body\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.54.0 adds response trailers and \u003ccode\u003e103 Early Hints\u003c/code\u003e to its experimental HTTP/2 implementation through \u003ccode\u003ezttp\u003c/code\u003e.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.54.0 \u0026quot;zttp\u0026gt;=0.0.34\u0026quot;\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend HTTP/2 response trailers\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e). The ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension lets applications send metadata, such as checksums, after the response body. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them. Multiple trailer messages are combined before completing the response.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental and opt-in.\u003c/strong\u003e Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Upgrade-based h2c and WebSockets over HTTP/2 remain unsupported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e💡 Hint at resources before the final response\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend \u003ccode\u003e103 Early Hints\u003c/code\u003e over HTTP/2\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e). Applications can use the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension to send resource hints before the final response. Each supplied link becomes a separate \u003ccode\u003eLink\u003c/code\u003e header.\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.53.0...0.54.0\"\u003e0.53.0...0.54.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.53.0\u003c/h2\u003e\n\u003ch2\u003e🌐 Opt-in HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.53.0 adds experimental HTTP/2 through \u003ccode\u003ezttp\u003c/code\u003e, alongside a new \u003ccode\u003ezuvloop\u003c/code\u003e integration and connection-handling improvements.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.53.0\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eServe HTTP/1.1 and HTTP/2 with \u003ccode\u003ezttp\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e). Install \u003ccode\u003ezttp\u003c/code\u003e, then enable HTTP/2 with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Uvicorn negotiates HTTP/2 over TLS with ALPN and supports cleartext prior knowledge.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental.\u003c/strong\u003e Upgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚙️ More event loop choice\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eRun Uvicorn with \u003ccode\u003ezuvloop\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e). Install \u003ccode\u003ezuvloop\u003c/code\u003e separately and select it explicitly with \u003ccode\u003e--loop zuvloop\u003c/code\u003e on CPython 3.14 or newer.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🛡️ More reliable connections and proxies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHonor \u003ccode\u003eConnection: close\u003c/code\u003e token lists\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e). Uvicorn now parses comma-separated tokens case-insensitively across HTTP implementations.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTrust IPv6 loopback proxies by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e). The default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value now includes \u003ccode\u003e::1\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKeep upgraded WebSockets alive\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e). Uvicorn cancels the HTTP keep-alive timer when the connection becomes a WebSocket.\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.52.4...0.53.0\"\u003e0.52.4...0.53.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.54.0 (September 24, 2026)\u003c/h2\u003e\n\u003cp\u003eHTTP/2 support remains experimental. Install \u003ccode\u003ezttp\u0026gt;=0.0.34\u003c/code\u003e and enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd HTTP/2 response trailers through the ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd HTTP/2 \u003ccode\u003e103 Early Hints\u003c/code\u003e through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.53.0 (September 14, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release adds experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e. Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\nUpgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003ezuvloop\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle comma-separated, case-insensitive \u003ccode\u003eConnection: close\u003c/code\u003e tokens across HTTP implementations (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTrust IPv6 loopback in the default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancel the HTTP keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\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.co...\n\n_Description has been truncated_","html_url":"https://github.com/JWEB0689/pr-agent/pull/22","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/JWEB0689%2Fpr-agent/issues/22","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/22/packages"},{"uuid":"6037139143","node_id":"PR_kwDOVMrGps8AAAABKu7R3g","number":6,"state":"open","title":"chore(ci): bump the ci-requirements group across 1 directory with 9 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-10-26T09:42:06.000Z","updated_at":"2026-10-26T09:42:10.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(ci): bump","group_name":"ci-requirements","update_count":9,"packages":[{"name":"pip","old_version":"26.2.1","new_version":"26.2.2","repository_url":"https://github.com/pypa/pip"},{"name":"uv","old_version":"0.12.18","new_version":"0.13.1","repository_url":"https://github.com/astral-sh/uv"},{"name":"pydantic","old_version":"2.13.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"semgrep","old_version":"1.179.0","new_version":"1.181.0","repository_url":"https://github.com/semgrep/semgrep"},{"name":"pymdown-extensions","old_version":"12.1","new_version":"12.3","repository_url":"https://github.com/facelessuser/pymdown-extensions"},{"name":"fastapi","old_version":"0.142.4","new_version":"0.146.0","repository_url":"https://github.com/fastapi/fastapi"},{"name":"hypothesis","old_version":"6.168.5","new_version":"6.170.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"pre-commit","old_version":"4.6.2","new_version":"4.7.0","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"ruff","old_version":"0.16.10","new_version":"0.17.1","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the ci-requirements group with 9 updates in the /.github/requirements directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pip](https://github.com/pypa/pip) | `26.2.1` | `26.2.2` |\n| [uv](https://github.com/astral-sh/uv) | `0.12.18` | `0.13.1` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.5` | `2.14.1` |\n| [semgrep](https://github.com/semgrep/semgrep) | `1.179.0` | `1.181.0` |\n| [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) | `12.1` | `12.3` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.142.4` | `0.146.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.168.5` | `6.170.2` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.2` | `4.7.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.10` | `0.17.1` |\n\n\nUpdates `pip` from 26.2.1 to 26.2.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/pip/blob/main/NEWS.rst\"\u003epip's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e26.2.2 (2026-10-20)\u003c/h1\u003e\n\u003ch2\u003eVendored Libraries\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade certifi to 2026.10.19\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip/commit/b3b696fe2122f2339d782517559bfade2cb6b879\"\u003e\u003ccode\u003eb3b696f\u003c/code\u003e\u003c/a\u003e Bump for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip/commit/b0c56c14579ea421d4825dfbc8a3bd819322d81f\"\u003e\u003ccode\u003eb0c56c1\u003c/code\u003e\u003c/a\u003e Upgrade certifi to 2026.10.19\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pypa/pip/compare/26.2.1...26.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uv` from 0.12.18 to 0.13.1\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.13.1\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-14.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore \u003ccode\u003eRequires-Python\u003c/code\u003e upper bounds in \u003ccode\u003euv pip check\u003c/code\u003e and \u003ccode\u003euv pip install --strict\u003c/code\u003e, consistent with resolution (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22500\"\u003e#22500\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Linux SPARC by falling back when filesystem cloning and detailed cache accounting are unavailable (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22463\"\u003e#22463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReport missing trusted hashes in resolution errors (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22241\"\u003e#22241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePython\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CPython 3.16.0a1 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22527\"\u003e#22527\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow \u003ccode\u003euv tool upgrade\u003c/code\u003e to upgrade installed tools when \u003ccode\u003etool-install-locks\u003c/code\u003e is enabled (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22498\"\u003e#22498\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd preliminary support for parsing PEP 825 variant labels in wheel filenames with \u003ccode\u003ewheel-variants\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22039\"\u003e#22039\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReduce uv's binary size (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22429\"\u003e#22429\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22430\"\u003e#22430\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22432\"\u003e#22432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSpeed up Simple API parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22429\"\u003e#22429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReduce package metadata parsing overhead (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22239\"\u003e#22239\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent tool and managed Python uninstalls from deleting unrelated files beside their storage directories (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22495\"\u003e#22495\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestore support for source distributions containing hard links or full-length tar user or group names (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22516\"\u003e#22516\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22522\"\u003e#22522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve device files and FIFOs used as \u003ccode\u003euv pip compile\u003c/code\u003e or \u003ccode\u003euv export\u003c/code\u003e output destinations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22496\"\u003e#22496\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003esys._base_executable\u003c/code\u003e detection for environments created from symlinked interpreters (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22520\"\u003e#22520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent concurrent readers from observing partially written lockfiles, Python version files, or managed Python sysconfig files (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22399\"\u003e#22399\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22402\"\u003e#22402\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22403\"\u003e#22403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSerialize concurrent project commands that reach the same environment through real and symlinked paths (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22390\"\u003e#22390\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent installs, syncs, and environment creation from failing when they race with \u003ccode\u003euv cache clean\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22387\"\u003e#22387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent concurrent tool installations from corrupting an environment when the last tool is uninstalled (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22391\"\u003e#22391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePersist changed upgrade settings even when \u003ccode\u003euv tool upgrade\u003c/code\u003e leaves the tool version unchanged (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22499\"\u003e#22499\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse environments with installed Git dependencies pinned to full commit hashes without resolving again (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22464\"\u003e#22464\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplain how to select an emulated Python interpreter on Windows ARM64 when native wheels are unavailable (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22424\"\u003e#22424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix the \u003ccode\u003e.netrc\u003c/code\u003e format documentation link (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22514\"\u003e#22514\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePublish Python 3.15-based uv Docker images under stable tags (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22503\"\u003e#22503\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall uv 0.13.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/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.13.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-14.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore \u003ccode\u003eRequires-Python\u003c/code\u003e upper bounds in \u003ccode\u003euv pip check\u003c/code\u003e and \u003ccode\u003euv pip install --strict\u003c/code\u003e, consistent with resolution (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22500\"\u003e#22500\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Linux SPARC by falling back when filesystem cloning and detailed cache accounting are unavailable (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22463\"\u003e#22463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReport missing trusted hashes in resolution errors (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22241\"\u003e#22241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePython\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CPython 3.16.0a1 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22527\"\u003e#22527\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow \u003ccode\u003euv tool upgrade\u003c/code\u003e to upgrade installed tools when \u003ccode\u003etool-install-locks\u003c/code\u003e is enabled (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22498\"\u003e#22498\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd preliminary support for parsing PEP 825 variant labels in wheel filenames with \u003ccode\u003ewheel-variants\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22039\"\u003e#22039\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReduce uv's binary size (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22429\"\u003e#22429\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22430\"\u003e#22430\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22432\"\u003e#22432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSpeed up Simple API parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22429\"\u003e#22429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReduce package metadata parsing overhead (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22239\"\u003e#22239\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent tool and managed Python uninstalls from deleting unrelated files beside their storage directories (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22495\"\u003e#22495\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestore support for source distributions containing hard links or full-length tar user or group names (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22516\"\u003e#22516\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22522\"\u003e#22522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve device files and FIFOs used as \u003ccode\u003euv pip compile\u003c/code\u003e or \u003ccode\u003euv export\u003c/code\u003e output destinations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22496\"\u003e#22496\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003esys._base_executable\u003c/code\u003e detection for environments created from symlinked interpreters (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22520\"\u003e#22520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent concurrent readers from observing partially written lockfiles, Python version files, or managed Python sysconfig files (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22399\"\u003e#22399\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22402\"\u003e#22402\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22403\"\u003e#22403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSerialize concurrent project commands that reach the same environment through real and symlinked paths (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22390\"\u003e#22390\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent installs, syncs, and environment creation from failing when they race with \u003ccode\u003euv cache clean\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22387\"\u003e#22387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent concurrent tool installations from corrupting an environment when the last tool is uninstalled (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22391\"\u003e#22391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePersist changed upgrade settings even when \u003ccode\u003euv tool upgrade\u003c/code\u003e leaves the tool version unchanged (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22499\"\u003e#22499\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse environments with installed Git dependencies pinned to full commit hashes without resolving again (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22464\"\u003e#22464\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplain how to select an emulated Python interpreter on Windows ARM64 when native wheels are unavailable (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22424\"\u003e#22424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix the \u003ccode\u003e.netrc\u003c/code\u003e format documentation link (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22514\"\u003e#22514\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePublish Python 3.15-based uv Docker images under stable tags (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22503\"\u003e#22503\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.13.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-09.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/62faed3351cfee2121b3c28b937b1f4b93233a93\"\u003e\u003ccode\u003e62faed3\u003c/code\u003e\u003c/a\u003e Bump version to 0.13.1 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22525\"\u003e#22525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/01bfd2279db7567446e6fa8f08198c7165a3ade4\"\u003e\u003ccode\u003e01bfd22\u003c/code\u003e\u003c/a\u003e Sync latest Python releases (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22527\"\u003e#22527\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/07ab80e743b83b910da7312eebb9c0346fe51365\"\u003e\u003ccode\u003e07ab80e\u003c/code\u003e\u003c/a\u003e Avoid linking the Zstandard ZIP encoder (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22432\"\u003e#22432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/66cea0c1027999d1bfc7f69258942cc8392c4186\"\u003e\u003ccode\u003e66cea0c\u003c/code\u003e\u003c/a\u003e Keep large Debug formatters out of line (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22430\"\u003e#22430\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/d7eb7ab1142e0da5b3694dd055973a7e3baa0089\"\u003e\u003ccode\u003ed7eb7ab\u003c/code\u003e\u003c/a\u003e Deserialize dependency overrides and Simple API fields directly (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22429\"\u003e#22429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/b757f15552203f42d8081b2378955e725cd732ce\"\u003e\u003ccode\u003eb757f15\u003c/code\u003e\u003c/a\u003e Revert interpreter cache warming (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22520\"\u003e#22520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/c977e8e13b9aa3caa572654e47bf1c51a362f6d1\"\u003e\u003ccode\u003ec977e8e\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ebot:automerge\u003c/code\u003e for promoted pull requests (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22523\"\u003e#22523\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/4f14d44ce52fe64bd007fdcb5564ac4a9629c262\"\u003e\u003ccode\u003e4f14d44\u003c/code\u003e\u003c/a\u003e Require hashes for uv's build dependencies (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22517\"\u003e#22517\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/06bf2e81489ea54db0861ad5896c28e70a44d8a3\"\u003e\u003ccode\u003e06bf2e8\u003c/code\u003e\u003c/a\u003e Bump tar-codec to 0.0.15 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22522\"\u003e#22522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/6609cfd7af6474cf87c1112661c0f227b45f36c4\"\u003e\u003ccode\u003e6609cfd\u003c/code\u003e\u003c/a\u003e Use async I/O and atomic pkgconfig writes for managed Python setup (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22521\"\u003e#22521\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/uv/compare/0.12.18...0.13.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `semgrep` from 1.179.0 to 1.181.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/semgrep/semgrep/releases\"\u003esemgrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.181.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.181.0\"\u003e1.181.0\u003c/a\u003e - 2026-10-14\u003c/h2\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003esemgrep scan\u003c/code\u003e now uses the same asynchronous configuration generation and retries as \u003ccode\u003esemgrep ci\u003c/code\u003e when fetching platform scan configurations. (CODE-9930)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePython only: Supply Chain now reports every package declared in a \u003ccode\u003erequirements.txt\u003c/code\u003e, not only the ones pinned with \u003ccode\u003e==\u003c/code\u003e. A requirement with a version range (\u003ccode\u003erequests\u0026gt;=2.0\u003c/code\u003e, \u003ccode\u003enumpy~=1.26\u003c/code\u003e, \u003ccode\u003edjango==2.2.*\u003c/code\u003e, \u003ccode\u003erequests (\u0026gt;=2.0)\u003c/code\u003e) is reported with the declared specifier as its version, and a bare name (\u003ccode\u003eflask\u003c/code\u003e) is reported with an empty version, so they appear in the dependency inventory and SBOM instead of being dropped with a \u0026quot;not pinned to an exact version\u0026quot; parse error. These dependencies have no definitive installed version, so for now they produce no Supply Chain findings. When there is no \u003ccode\u003erequirements.in\u003c/code\u003e manifest to consult, a range or bare-name line is reported as a direct dependency, since it was declared by hand rather than written by a resolver; exact pins keep their previous unknown transitivity. Local path and URL lines are no longer reported as parse errors, while a line whose leading token is not a valid package name (\u003ccode\u003erequests$foo\u0026gt;=1\u003c/code\u003e) is now reported as a parse error instead of being dropped silently. Other ecosystems and other Python manifest formats are unchanged. (SC-3487)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003epro: Various performance improvements for historical secrets scanning. (SCRT-983-historical-performance)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ego grammar update (v0.23.4):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eGo target parsing now supports composite type-set constraints and shorthand union constraints on type parameters, preserving underlying-type markers and all union members. Literal generic rule-pattern syntax remains unchanged.\u003c/li\u003e\n\u003cli\u003eGo target parsing now supports embedded generic struct fields, including pointer and package-qualified embeddings, while retaining their type arguments.\u003c/li\u003e\n\u003cli\u003eGo target parsing now supports standalone generic function instantiations with multiple or composite type arguments, such as Pair[int, string] and Identity[[]int], including qualified function names.\u003c/li\u003e\n\u003cli\u003eGo target parsing now accepts Unicode decimal digits after the first character of an identifier, including Arabic-Indic and Devanagari digits.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(go-v0.23.4)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHack grammar update:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHack target parsing now supports capability lists on functions, methods, function types, lambdas, and anonymous functions, including empty lists and context-dependent capabilities.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports context constants with capability bounds or initializers, preserving the distinction between super bounds, as bounds, and assigned capabilities. Unbounded abstract context constants retain their existing representation limitation.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports concrete and abstract enum classes with typed members, plus qualified and unqualified enum class labels.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports function and static-method references with empty or explicit type arguments, such as foo\u0026lt;\u0026gt; and MyClass::bar\u003c!-- raw HTML omitted --\u003e.\u003c/li\u003e\n\u003cli\u003eHack target parsing now preserves type arguments on calls and constructors such as foo\u003c!-- raw HTML omitted --\u003e(), $obj-\u0026gt;bar\u003c!-- raw HTML omitted --\u003e(...), and new MyClass\u003c!-- raw HTML omitted --\u003e(...), matching other languages' typed-call representation.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports expression-tree literals such as Example\u003ccode\u003e1 + 2\u003c/code\u003e, preserving the visitor and body text. Embedded DSL bodies remain opaque rather than being parsed as Hack expressions.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports file-level attributes such as \u0026lt;\u0026lt;file: SomeAttribute(...)\u0026gt;\u0026gt;, preserving attribute names and arguments.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports internal visibility on methods and properties, keeping it distinct from public, protected, and private visibility.\u003c/li\u003e\n\u003cli\u003eHack target parsing now accepts namespace-relative names such as namespace\\run() and include/require member names in piped expressions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(hack-1a7ded90288189746c54861ac144ede97df95081)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003epro: Historical secrets scanning no longer aborts when preparatory \u003ccode\u003egit gc\u003c/code\u003e\nfails. (SCRT-982-historical-gc-nonfatal)\u003c/li\u003e\n\u003cli\u003eSupply Chain: lockfileless Gradle resolution now tells the dependency graph\nplugin where to write its report, so builds that relocate their build\ndirectory resolve instead of failing. When the plugin writes no report, the\nscan reports a resolution error that includes the Gradle log instead of\ncrashing on the missing file. (code-9953)\u003c/li\u003e\n\u003cli\u003eSupply Chain: lockfileless Gradle and Maven scans now report incomplete\ndependency resolution when dependencies or transitive metadata cannot be\nresolved. Registry HTTP failures include the affected URL when available. (sc-3358)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Infra/Release Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eForward optional job context when registering CLI scans. (SMS-3333)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.180.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.180.0\"\u003e1.180.0\u003c/a\u003e - 2026-10-07\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/semgrep/semgrep/blob/develop/CHANGELOG.md\"\u003esemgrep's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.181.0\"\u003e1.181.0\u003c/a\u003e - 2026-10-14\u003c/h2\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003esemgrep scan\u003c/code\u003e now uses the same asynchronous configuration generation and retries as \u003ccode\u003esemgrep ci\u003c/code\u003e when fetching platform scan configurations. (CODE-9930)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePython only: Supply Chain now reports every package declared in a \u003ccode\u003erequirements.txt\u003c/code\u003e, not only the ones pinned with \u003ccode\u003e==\u003c/code\u003e. A requirement with a version range (\u003ccode\u003erequests\u0026gt;=2.0\u003c/code\u003e, \u003ccode\u003enumpy~=1.26\u003c/code\u003e, \u003ccode\u003edjango==2.2.*\u003c/code\u003e, \u003ccode\u003erequests (\u0026gt;=2.0)\u003c/code\u003e) is reported with the declared specifier as its version, and a bare name (\u003ccode\u003eflask\u003c/code\u003e) is reported with an empty version, so they appear in the dependency inventory and SBOM instead of being dropped with a \u0026quot;not pinned to an exact version\u0026quot; parse error. These dependencies have no definitive installed version, so for now they produce no Supply Chain findings. When there is no \u003ccode\u003erequirements.in\u003c/code\u003e manifest to consult, a range or bare-name line is reported as a direct dependency, since it was declared by hand rather than written by a resolver; exact pins keep their previous unknown transitivity. Local path and URL lines are no longer reported as parse errors, while a line whose leading token is not a valid package name (\u003ccode\u003erequests$foo\u0026gt;=1\u003c/code\u003e) is now reported as a parse error instead of being dropped silently. Other ecosystems and other Python manifest formats are unchanged. (SC-3487)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003epro: Various performance improvements for historical secrets scanning. (SCRT-983-historical-performance)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ego grammar update (v0.23.4):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eGo target parsing now supports composite type-set constraints and shorthand union constraints on type parameters, preserving underlying-type markers and all union members. Literal generic rule-pattern syntax remains unchanged.\u003c/li\u003e\n\u003cli\u003eGo target parsing now supports embedded generic struct fields, including pointer and package-qualified embeddings, while retaining their type arguments.\u003c/li\u003e\n\u003cli\u003eGo target parsing now supports standalone generic function instantiations with multiple or composite type arguments, such as Pair[int, string] and Identity[[]int], including qualified function names.\u003c/li\u003e\n\u003cli\u003eGo target parsing now accepts Unicode decimal digits after the first character of an identifier, including Arabic-Indic and Devanagari digits.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(go-v0.23.4)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHack grammar update:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHack target parsing now supports capability lists on functions, methods, function types, lambdas, and anonymous functions, including empty lists and context-dependent capabilities.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports context constants with capability bounds or initializers, preserving the distinction between super bounds, as bounds, and assigned capabilities. Unbounded abstract context constants retain their existing representation limitation.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports concrete and abstract enum classes with typed members, plus qualified and unqualified enum class labels.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports function and static-method references with empty or explicit type arguments, such as foo\u0026lt;\u0026gt; and MyClass::bar\u003c!-- raw HTML omitted --\u003e.\u003c/li\u003e\n\u003cli\u003eHack target parsing now preserves type arguments on calls and constructors such as foo\u003c!-- raw HTML omitted --\u003e(), $obj-\u0026gt;bar\u003c!-- raw HTML omitted --\u003e(...), and new MyClass\u003c!-- raw HTML omitted --\u003e(...), matching other languages' typed-call representation.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports expression-tree literals such as Example\u003ccode\u003e1 + 2\u003c/code\u003e, preserving the visitor and body text. Embedded DSL bodies remain opaque rather than being parsed as Hack expressions.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports file-level attributes such as \u0026lt;\u0026lt;file: SomeAttribute(...)\u0026gt;\u0026gt;, preserving attribute names and arguments.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports internal visibility on methods and properties, keeping it distinct from public, protected, and private visibility.\u003c/li\u003e\n\u003cli\u003eHack target parsing now accepts namespace-relative names such as namespace\\run() and include/require member names in piped expressions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(hack-1a7ded90288189746c54861ac144ede97df95081)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003epro: Historical secrets scanning no longer aborts when preparatory \u003ccode\u003egit gc\u003c/code\u003e\nfails. (SCRT-982-historical-gc-nonfatal)\u003c/li\u003e\n\u003cli\u003eSupply Chain: lockfileless Gradle resolution now tells the dependency graph\nplugin where to write its report, so builds that relocate their build\ndirectory resolve instead of failing. When the plugin writes no report, the\nscan reports a resolution error that includes the Gradle log instead of\ncrashing on the missing file. (code-9953)\u003c/li\u003e\n\u003cli\u003eSupply Chain: lockfileless Gradle and Maven scans now report incomplete\ndependency resolution when dependencies or transitive metadata cannot be\nresolved. Registry HTTP failures include the affected URL when available. (sc-3358)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Infra/Release Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eForward optional job context when registering CLI scans. (SMS-3333)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.180.0\"\u003e1.180.0\u003c/a\u003e - 2026-10-07\u003c/h2\u003e\n\u003ch3\u003e### Added\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/semgrep/semgrep/commit/72d3525fe7e02f486428386078f192f8c4756804\"\u003e\u003ccode\u003e72d3525\u003c/code\u003e\u003c/a\u003e chore: release 1.181.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/51602ad27f09ef9342a5620601de5ef8f572fbc6\"\u003e\u003ccode\u003e51602ad\u003c/code\u003e\u003c/a\u003e feat(sca): Report unpinned requirements.txt dependencies instead of skipping ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/3be31ed6f1d60b41104776656bfca240f848796a\"\u003e\u003ccode\u003e3be31ed\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#7161\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/460ef57171c87544db5d2c18ba92da431c0bc3d5\"\u003e\u003ccode\u003e460ef57\u003c/code\u003e\u003c/a\u003e fix(sca): Pin the Gradle dependency graph report dir and report a missing gra...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/945793a4532ade2bf79581b677bcfbb7fecf323b\"\u003e\u003ccode\u003e945793a\u003c/code\u003e\u003c/a\u003e fix(ci): unlink openssl@3 before brew installs on macOS jobs (CODE-10023) (se...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/2c029cdf2bf48abb6af684d106e712456060099e\"\u003e\u003ccode\u003e2c029cd\u003c/code\u003e\u003c/a\u003e feat(cli): Share async config fetching between scan and ci (semgrep/semgrep-p...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/7cae498f8ad8b96c47f53a8eafd34ad77dbd58d3\"\u003e\u003ccode\u003e7cae498\u003c/code\u003e\u003c/a\u003e feat(cli): forward opaque job context at scan registration (semgrep/semgrep-p...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/d8345fdf2185605485a03bffef7f1ff5ccb8f809\"\u003e\u003ccode\u003ed8345fd\u003c/code\u003e\u003c/a\u003e fix(grammar-update): Claude output budget and c-sharp-pro fyi.list (semgrep/s...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/14a2d0480f53ffc60256cb23a0997cbd43e58076\"\u003e\u003ccode\u003e14a2d04\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#7199\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/ad199376ccea420f1cd771fec9ae918f12f74569\"\u003e\u003ccode\u003ead19937\u003c/code\u003e\u003c/a\u003e chore: regenerate parsers with tree-sitter 0.26.3 where possible (semgrep/sem...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/semgrep/semgrep/compare/v1.179.0...v1.181.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymdown-extensions` from 12.1 to 12.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/facelessuser/pymdown-extensions/releases\"\u003epymdown-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eNEW\u003c/strong\u003e: BetterEm: Expose a way to disable CommonMark punctuation rules in BetterEm if desired via a new\n\u003ccode\u003epunctuation\u003c/code\u003e option.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e12.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eNEW\u003c/strong\u003e: Add official support for Python 3.15.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNEW\u003c/strong\u003e: Tilde, Caret: For backwards compatibility, disable CommonMark punctuation rules by default. If subscript or\nsuperscript is disabled in the respective extension, CommonMark rules will be honored again. A new \u003ccode\u003epunctuation\u003c/code\u003e\nrule has been added to force CommonMark rules. When done, people will need to be aware of punctuation when subscript\nor superscript is enabled and escape any that violates CommonMark rules.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNEW\u003c/strong\u003e: Highlight: Highlight now allows in the \u003ccode\u003eauto_title_map\u003c/code\u003e specifying the title as a simple string or a\ndictionary containing the title and the title mode: either \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003ehtml\u003c/code\u003e, with \u003ccode\u003etext\u003c/code\u003e being the default. This\nallows a title to be specified and treated as HTML when the mode is \u003ccode\u003ehtml\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNEW\u003c/strong\u003e: SuperFences: Add new \u003ccode\u003etitle_mode\u003c/code\u003e option for Pygments fenced blocks that allows a user to specify a title\nto be treated as HTML via \u003ccode\u003etitle_mode=\u0026quot;html\u0026quot;\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/facelessuser/pymdown-extensions/commit/24ae2b301304dac7b8e3dc347dbbcaac36671a90\"\u003e\u003ccode\u003e24ae2b3\u003c/code\u003e\u003c/a\u003e Fix link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/f19f2d113893385f35737ddeaca3e8ce224709b2\"\u003e\u003ccode\u003ef19f2d1\u003c/code\u003e\u003c/a\u003e Allow disabling CommonMark punctuation rules in BetterEm\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/a656909d439b5570f12f9069d67adf163c8506b9\"\u003e\u003ccode\u003ea656909\u003c/code\u003e\u003c/a\u003e Docs: Fix duplicate word\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/0b905467cca69ac91aa4a9b0e5aa75abd93d6ede\"\u003e\u003ccode\u003e0b90546\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Fix lint\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/11fbe9f174beff658efaa05c958257e69c147aa3\"\u003e\u003ccode\u003e11fbe9f\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Drop Python 3.10 support\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/3b5e585144686c9ceae68ded8ce4f271332d779f\"\u003e\u003ccode\u003e3b5e585\u003c/code\u003e\u003c/a\u003e Docs: Fix grammar\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/91ec2a842a736f7f47b84850d8ffbb43d69b6c74\"\u003e\u003ccode\u003e91ec2a8\u003c/code\u003e\u003c/a\u003e Docs: Fix default admonition/details styling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/5d7efe44e03c9ff3bbd852fc7b44610210cc1ca7\"\u003e\u003ccode\u003e5d7efe4\u003c/code\u003e\u003c/a\u003e Docs: update js dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/195228a75fb7b739275ff3af1a6f343e51cf1bf9\"\u003e\u003ccode\u003e195228a\u003c/code\u003e\u003c/a\u003e Fix lint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/ff07dc2722d1ea9c1fc780355fd39b329929570a\"\u003e\u003ccode\u003eff07dc2\u003c/code\u003e\u003c/a\u003e Drop Python 3.10 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/facelessuser/pymdown-extensions/compare/12.1...12.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi` from 0.142.4 to 0.146.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.146.0\u003c/h2\u003e\n\u003cp\u003eThe \u003ccode\u003eroot_path\u003c/code\u003e parameter in \u003ccode\u003eFastAPI()\u003c/code\u003e is deprecated. Configure the server with \u003ccode\u003efastapi run --root-path /api/v1\u003c/code\u003e instead.\u003c/p\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🗑️ Deprecate the \u003ccode\u003eroot_path\u003c/code\u003e parameter in \u003ccode\u003eFastAPI\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16520\"\u003e#16520\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.145.0\u003c/h2\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔥 Remove deprecated \u003ccode\u003eopenapi_prefix\u003c/code\u003e and unused \u003ccode\u003e**extra\u003c/code\u003e from \u003ccode\u003eFastAPI\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16518\"\u003e#16518\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 URL paths in templates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16517\"\u003e#16517\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.144.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add WebSocket support to security dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/10147\"\u003e#10147\u003c/a\u003e by \u003ca href=\"https://github.com/mnixry\"\u003e\u003ccode\u003e@​mnixry\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.143.5\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix handling of empty value for \u003ccode\u003ebyte\u003c/code\u003e file list parameter. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/9383\"\u003e#9383\u003c/a\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.143.4\u003c/h2\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Add httpx2 to optional dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16512\"\u003e#16512\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.143.3\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix non-finite float serialization in JSONL and SSE streams. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16509\"\u003e#16509\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🎨 Update Python format in Markdown with Ruff. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16505\"\u003e#16505\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.143.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix blocking frontend fallback file checks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16503\"\u003e#16503\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16500\"\u003e#16500\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16499\"\u003e#16499\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16501\"\u003e#16501\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3070b5105fe02c4afdba5e3aea6c2cf2e3796c7f\"\u003e\u003ccode\u003e3070b51\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.146.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16521\"\u003e#16521\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/a17bd595ae17d5b8ec01f2acc291f36844d478fe\"\u003e\u003ccode\u003ea17bd59\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/45c419938435d668a85a2e81bb9ac41495f8a648\"\u003e\u003ccode\u003e45c4199\u003c/code\u003e\u003c/a\u003e 🗑️ Deprecate the \u003ccode\u003eroot_path\u003c/code\u003e parameter in \u003ccode\u003eFastAPI\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16520\"\u003e#16520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/129c9cfcd33c3ed4371c9674e724fd838a292e2b\"\u003e\u003ccode\u003e129c9cf\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.145.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16519\"\u003e#16519\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/475b46638fd2ea6608f80418a6333a9107340e28\"\u003e\u003ccode\u003e475b466\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/a37a162de602049ab65595a98d88a75996ee6814\"\u003e\u003ccode\u003ea37a162\u003c/code\u003e\u003c/a\u003e 🔥 Remove deprecated \u003ccode\u003eopenapi_prefix\u003c/code\u003e and unused \u003ccode\u003e**extra\u003c/code\u003e from \u003ccode\u003eFastAPI\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16\"\u003e#16\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0ab3e037a6bd406ae8462841864b5c6337c8b329\"\u003e\u003ccode\u003e0ab3e03\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4f940b1b724626e74b944377051a801e0cd7686c\"\u003e\u003ccode\u003e4f940b1\u003c/code\u003e\u003c/a\u003e 📝 Document URL paths in templates (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16517\"\u003e#16517\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9528746e3493a1cdd17da2eff97c48ef65290713\"\u003e\u003ccode\u003e9528746\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.144.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16516\"\u003e#16516\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c18732cd43202c4cb310a8e6c1d75c2a6020294d\"\u003e\u003ccode\u003ec18732c\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.142.4...0.146.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.168.5 to 6.170.2\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/1555011e7eee2dec00cfcbfd802e921bd4262ed1\"\u003e\u003ccode\u003e1555011\u003c/code\u003e\u003c/a\u003e Bump hypothesis version to 6.170.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6a536f7f5eeba94cb3eaacbb8800ace70c469fbc\"\u003e\u003ccode\u003e6a536f7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4910\"\u003e#4910\u003c/a\u003e from HypothesisWorks/create-pull-request/patch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/1520429a50535de8b745a87a6d23f110ccb75045\"\u003e\u003ccode\u003e1520429\u003c/code\u003e\u003c/a\u003e nocover\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/d19a0a1e28f6d37fe27036bf5456918a457298a4\"\u003e\u003ccode\u003ed19a0a1\u003c/code\u003e\u003c/a\u003e wording\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7d31dd7d6dc2bcc603a91209fc362a69f8fb8a3d\"\u003e\u003ccode\u003e7d31dd7\u003c/code\u003e\u003c/a\u003e add support for 3.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/e783c53aba1767a62c5358b1b635cee320bd587e\"\u003e\u003ccode\u003ee783c53\u003c/code\u003e\u003c/a\u003e Add Python 3.15 trove classifier\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/b3af0ecfa54a76530dcc324df84834bf682560e3\"\u003e\u003ccode\u003eb3af0ec\u003c/code\u003e\u003c/a\u003e Update pinned dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/718686d1e392968eb0953c043ef249c5d9d11a59\"\u003e\u003ccode\u003e718686d\u003c/code\u003e\u003c/a\u003e Bump hypothesis version to 6.170.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/ba6c3e39cf741c226412194acc21ab719a35f6e7\"\u003e\u003ccode\u003eba6c3e3\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4834\"\u003e#4834\u003c/a\u003e from Zac-HD/claude/hypothesis-4458-prototypes-nqza1f\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7572cd07bbb9d845c40f71c95ba3853fb7467403\"\u003e\u003ccode\u003e7572cd0\u003c/code\u003e\u003c/a\u003e Bump hypothesis version to 6.170.0 and update changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/v6.168.5...v6.170.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 4.6.2 to 4.7.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.7.0\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks during commit with \u003ccode\u003e-a\u003c/code\u003e or inside a submodule.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3773\"\u003e#3773\u003c/a\u003e issue by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e PR by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.7.0 - 2026-10-12\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks during commit with \u003ccode\u003e-a\u003c/code\u003e or inside a submodule.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3773\"\u003e#3773\u003c/a\u003e issue by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e PR by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/65bb884a567e8be6adc51e8bfbcf26f708eb35a2\"\u003e\u003ccode\u003e65bb884\u003c/code\u003e\u003c/a\u003e v4.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/73926c191e10d2ede0ca627632e6e697d8092a61\"\u003e\u003ccode\u003e73926c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e from cbirkhold/node-no-git-env-npm-install\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/860d07d18211a0154ffaa4e77bf2a43c2b2473a9\"\u003e\u003ccode\u003e860d07d\u003c/code\u003e\u003c/a\u003e don't leak GIT_* env into \u003ccode\u003enpm install\u003c/code\u003e for \u003ccode\u003elanguage: node\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9ad8a0a99acec306e6e9c32490b0088008b83069\"\u003e\u003ccode\u003e9ad8a0a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3775\"\u003e#3775\u003c/a\u003e from pre-commit/contextlib-chdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9905e88afc7d860ccf21fba40fc9f5f23e0e0100\"\u003e\u003ccode\u003e9905e88\u003c/code\u003e\u003c/a\u003e use contextlib.chdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/59cb7925317a3c548ccb8cb17bbfb09d81ac8367\"\u003e\u003ccode\u003e59cb792\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3771\"\u003e#3771\u003c/a\u003e from pre-commit/all-repos_autofix_py311-plus\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2be170142fb6e0f1402a8bf036b5c9f8dd27fd09\"\u003e\u003ccode\u003e2be1701\u003c/code\u003e\u003c/a\u003e remove triple-nested withs for 3.14 coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/4c8d22aa125e68c6f45b4f71359c1bd7942f844f\"\u003e\u003ccode\u003e4c8d22a\u003c/code\u003e\u003c/a\u003e py311+\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/c4292384c94590cd8e6c68f677d95e3675994602\"\u003e\u003ccode\u003ec429238\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3770\"\u003e#3770\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f49e251f379f2c704e1223a791766e2bc9c78602\"\u003e\u003ccode\u003ef49e251\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.6.2...v4.7.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.16.10 to 0.17.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.17.1\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.17.1\u003c/h2\u003e\n\u003cp\u003e|  File  | Platform | Checksum |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.17.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-09.\u003c/p\u003e\n\u003cp\u003eThe executables in our macOS and Windows release archives and \u003ccode\u003eruff\u003c/code\u003e wheels are now code-signed.\nmacOS executables are signed with an Apple Developer ID certificate and notarized by Apple. Windows\nexecutables have timestamped Authenticode signatures from Azure Artifact Signing. This enables\nverification of the release publisher and binary integrity, supports publisher-based allowlisting,\nand should reduce security warnings and antivirus false positives.\u003c/p\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate the default and latest Python versions for 3.15 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28792\"\u003e#28792\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eRuff now defaults to Python 3.11 instead of 3.10 when no Python version is configured through\n\u003ca href=\"https://docs.astral.sh/ruff/settings/#target-version\"\u003e\u003ccode\u003etarget-version\u003c/code\u003e\u003c/a\u003e or\n\u003ca href=\"https://docs.astral.sh/ruff/configuration/#inferring-the-python-version\"\u003e\u003ccode\u003erequires-python\u003c/code\u003e\u003c/a\u003e. When\nchecking for syntax errors without a configured Python version, Ruff now defaults to Python 3.15\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/astral-sh/ruff/commit/4683270c69cbdaf6ad64d3f983fc458d5a43b41f\"\u003e\u003ccode\u003e4683270\u003c/code\u003e\u003c/a\u003e Bump version to 0.17.1 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29420\"\u003e#29420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3514027edb659bbc3c787d355be9d130e5587f15\"\u003e\u003ccode\u003e3514027\u003c/code\u003e\u003c/a\u003e [ty] Update typing conformance suite pin (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29417\"\u003e#29417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/829455624d78f2e89669e4b4b14af2b96abdb1ae\"\u003e\u003ccode\u003e8294556\u003c/code\u003e\u003c/a\u003e Update referenced PR security-review workflow (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29237\"\u003e#29237\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d1e1b1f69b511df4385f64b510eeec4da01c1a0e\"\u003e\u003ccode\u003ed1e1b1f\u003c/code\u003e\u003c/a\u003e [ty] Preserve recursive aliases when rebuilding intersections (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29057\"\u003e#29057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/93526150df078af7dd8fc4226cdcc469539d2001\"\u003e\u003ccode\u003e9352615\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/83a3afc3156d73ae4296f3fa74ede28e4c72bfcd\"\u003e\u003ccode\u003e83a3afc\u003c/code\u003e\u003c/a\u003e Fix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/b42a8734410230f4529151782cae951b99bed858\"\u003e\u003ccode\u003eb42a873\u003c/code\u003e\u003c/a\u003e [ty] Clarify object attribute write-contract rationale (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29384\"\u003e#29384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d01678ebf594c97a7767d4372061c1f80ae5b5bb\"\u003e\u003ccode\u003ed01678e\u003c/code\u003e\u003c/a\u003e [ty] Clarify object attribute write-contract rationale (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29384\"\u003e#29384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/355b42a7719d8a555e3ee50c89848b42d8a11eb5\"\u003e\u003ccode\u003e355b42a\u003c/code\u003e\u003c/a\u003e [ty] Avoid writable override contracts from object (\u003ca href=\"https://redirect.github.com/ast...\n\n_Description has been truncated_","html_url":"https://github.com/actions-marketplace-validations/lucashgrifoni_Secure-SDLC-Evidence-Collector/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/actions-marketplace-validations%2Flucashgrifoni_Secure-SDLC-Evidence-Collector/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"},{"uuid":"6036772460","node_id":"PR_kwDORBklHc8AAAABKuoMTA","number":847,"state":"closed","title":"chore(deps): Bump pydantic from 2.13.4 to 2.14.1","user":"dependabot[bot]","labels":["automated","dependencies","ready-to-merge"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-10-26T11:16:38.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-26T09:16:59.000Z","updated_at":"2026-10-26T11:16:38.000Z","time_to_close":7179,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","packages":[{"name":"pydantic","old_version":"2.13.4","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.13.4 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n","html_url":"https://github.com/endavis/pynetappfoundry/pull/847","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/endavis%2Fpynetappfoundry/issues/847","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/847/packages"},{"uuid":"6033704715","node_id":"PR_kwDOO5GJos8AAAABKsJ3fw","number":181,"state":"open","title":"[Chore] Bump the uv-minor-patch group across 1 directory with 11 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-26T05:06:12.000Z","updated_at":"2026-10-26T05:06:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"[Chore] Bump","group_name":"uv-minor-patch","update_count":11,"packages":[{"name":"aiohttp","old_version":"3.14.4","new_version":"3.14.5","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"fastapi","old_version":"0.142.2","new_version":"0.161.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"fonttools","old_version":"4.66.1","new_version":"4.67.0","repository_url":"https://github.com/fonttools/fonttools"},{"name":"granian","old_version":"2.8.4","new_version":"2.8.5","repository_url":"https://github.com/emmett-framework/granian"},{"name":"numpy","old_version":"2.5.3","new_version":"2.5.4","repository_url":"https://github.com/numpy/numpy"},{"name":"pydantic","old_version":"2.13.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.15.0","new_version":"2.16.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"opendal","old_version":"0.47.10","new_version":"0.47.12","repository_url":"https://github.com/apache/opendal"},{"name":"asyncpg","old_version":"0.31.0","new_version":"0.32.0","repository_url":"https://github.com/MagicStack/asyncpg"},{"name":"coverage","old_version":"7.16.2","new_version":"7.17.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"ruff","old_version":"0.16.10","new_version":"0.17.2","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv-minor-patch group with 11 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.14.4` | `3.14.5` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.142.2` | `0.161.1` |\n| [fonttools](https://github.com/fonttools/fonttools) | `4.66.1` | `4.67.0` |\n| [granian](https://github.com/emmett-framework/granian) | `2.8.4` | `2.8.5` |\n| [numpy](https://github.com/numpy/numpy) | `2.5.3` | `2.5.4` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.5` | `2.14.1` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.15.0` | `2.16.1` |\n| [opendal](https://github.com/apache/opendal) | `0.47.10` | `0.47.12` |\n| [asyncpg](https://github.com/MagicStack/asyncpg) | `0.31.0` | `0.32.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.16.2` | `7.17.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.10` | `0.17.2` |\n\n\nUpdates `aiohttp` from 3.14.4 to 3.14.5\nUpdates `fastapi` from 0.142.2 to 0.161.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.161.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix OpenAPI schemas for standalone nullable form unions. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16598\"\u003e#16598\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.161.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16596\"\u003e#16596\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.160.0\u003c/h2\u003e\n\u003cp\u003eQuery, header, cookie, and form parameter models now apply their \u003ccode\u003eextra\u003c/code\u003e configuration to all submitted fields in the same parameter location, consistent with Pydantic behavior. This includes fields declared in other models, individual parameters, or dependencies, which were previously excluded.\u003c/p\u003e\n\u003cp\u003eWith \u003ccode\u003eextra=\u0026quot;forbid\u0026quot;\u003c/code\u003e, fields outside the model are rejected even if another parameter declares them. With \u003ccode\u003eextra=\u0026quot;allow\u0026quot;\u003c/code\u003e, those fields are included as model extras. With the default \u003ccode\u003eextra=\u0026quot;ignore\u0026quot;\u003c/code\u003e, they are ignored.\u003c/p\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16594\"\u003e#16594\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump certifi from 2026.1.4 to 2026.10.19. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16571\"\u003e#16571\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.159.1\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16586\"\u003e#16586\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.159.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16584\"\u003e#16584\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.158.2\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16582\"\u003e#16582\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.158.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Preserve form media types in OpenAPI. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16579\"\u003e#16579\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.158.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16577\"\u003e#16577\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.157.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/69ddc2badf9da1123bba4d360225ae6b085985f6\"\u003e\u003ccode\u003e69ddc2b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.161.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16599\"\u003e#16599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0cafa07bd4e4c220169e27425f504af3b737d1f8\"\u003e\u003ccode\u003e0cafa07\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/f90d0369380a539c673b1bbbbd86535b8cdee746\"\u003e\u003ccode\u003ef90d036\u003c/code\u003e\u003c/a\u003e 🐛 Fix OpenAPI schemas for standalone nullable form unions (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16598\"\u003e#16598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/80c8742d141e67beaf747343405c8facf999bc0c\"\u003e\u003ccode\u003e80c8742\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.161.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16597\"\u003e#16597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b105209dbf32d1e25ff7357ab706490dcafc9c44\"\u003e\u003ccode\u003eb105209\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e42ac0a13459086f42d96eab13748303bcfa78e7\"\u003e\u003ccode\u003ee42ac0a\u003c/code\u003e\u003c/a\u003e ✨ Add support for combining unions of form models (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16596\"\u003e#16596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/addd0778e996cf886972b8024113d79f8d0a3580\"\u003e\u003ccode\u003eaddd077\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.160.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16595\"\u003e#16595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/352a4edff3f4362f28c42da29e0879846f6f637e\"\u003e\u003ccode\u003e352a4ed\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/91a335ce946c7a832da973f2acf69b8876594216\"\u003e\u003ccode\u003e91a335c\u003c/code\u003e\u003c/a\u003e 🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16594\"\u003e#16594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ce6ee83e5411b98582e996e47edf7870418a68f4\"\u003e\u003ccode\u003ece6ee83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.142.2...0.161.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fonttools` from 4.66.1 to 4.67.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fonttools/fonttools/releases\"\u003efonttools's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.67.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[varLib] Support decreasing design-space axis mappings, via a new keyword-only \u003ccode\u003eallow_decreasing\u003c/code\u003e argument to \u003ccode\u003emodels.normalizeValue\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3970\"\u003e#3970\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4217\"\u003e#4217\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4243\"\u003e#4243\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[designspaceLib] Allow partial DesignSpace v5 axis subsets: omitted range attributes on an \u003ccode\u003e\u0026lt;axis-subset\u0026gt;\u003c/code\u003e are taken from the parent axis, as the spec says (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[designspaceLib] Fix \u003ccode\u003eDesignSpaceDocument.normalize()\u003c/code\u003e for mapped axes: axis bounds and rule conditions are now normalized from their original values (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4218\"\u003e#4218\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[designspaceLib] \u003ccode\u003esplitInterpolable\u003c/code\u003e and \u003ccode\u003esplitVariableFonts\u003c/code\u003e now warn when a source or instance is dropped because it lies outside the document's own axes, instead of silently discarding it (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4244\"\u003e#4244\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Add support for instancing variable COLRv1 fonts (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/2699\"\u003e#2699\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4279\"\u003e#4279\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Apply VVAR vertical-origin deltas to \u003ccode\u003eVORG\u003c/code\u003e, and use OpenType rounding for instanced advances and vertical origins (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4221\"\u003e#4221\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Keep a universal FeatureVariations record when pinning removes its last condition but other axes remain (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4247\"\u003e#4247\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Preserve ppem \u003ccode\u003eDevice\u003c/code\u003e corrections in GDEF, BASE, GPOS and JSTF instead of asserting on them (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4290\"\u003e#4290\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Allow requesting an axis's original range on VARC fonts (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4280\"\u003e#4280\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer, subset] Fold, remove or remap MATH \u003ccode\u003eVariationIndex\u003c/code\u003e devices when instancing, subsetting the GDEF store or optimizing it (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4288\"\u003e#4288\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib] Raise \u003ccode\u003eValueError: Missing required table fvar\u003c/code\u003e from \u003ccode\u003evarLib.mutator\u003c/code\u003e and the instancer CLI on a static font, instead of a bare \u003ccode\u003eKeyError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3751\"\u003e#3751\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4300\"\u003e#4300\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[featureVars] When adding \u003ccode\u003ervrn\u003c/code\u003e, also shift lookup indices inside existing FeatureVariations (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4233\"\u003e#4233\u003c/a\u003e). Handle null \u003ccode\u003eConditionSet\u003c/code\u003e and \u003ccode\u003eFeatureTableSubstitution\u003c/code\u003e offsets when building, subsetting and instancing (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4234\"\u003e#4234\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4235\"\u003e#4235\u003c/a\u003e). Keep \u003ccode\u003eFeatureTableSubstitution\u003c/code\u003e records sorted after merging new ones into an existing record (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4248\"\u003e#4248\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[ttLib] Fix FeatureParams (\u003ccode\u003esize\u003c/code\u003e, \u003ccode\u003essXX\u003c/code\u003e, \u003ccode\u003ecvXX\u003c/code\u003e) in FeatureVariations alternate feature tables, which failed to compile and round-trip (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3623\"\u003e#3623\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4278\"\u003e#4278\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[ttLib] Fully decode lazily loaded ligatures, \u003ccode\u003eSinglePos\u003c/code\u003e and \u003ccode\u003ePairPos\u003c/code\u003e arrays during recursive decompilation, so \u003ccode\u003ereorderGlyphs()\u003c/code\u003e on a lazy font no longer corrupts or asserts on them (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4231\"\u003e#4231\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4232\"\u003e#4232\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[VARC] Update the variation-store binary format to follow \u003ca href=\"https://redirect.github.com/harfbuzz/boring-expansion-spec/issues/175\"\u003eharfbuzz/boring-expansion-spec#175\u003c/a\u003e: \u003ccode\u003eSparseVarRegionList.RegionCount\u003c/code\u003e is uint32, sparse axes use Offset32 and \u003ccode\u003eMultiVarData\u003c/code\u003e items are stored in an INDEX. VARC fonts built with earlier fontTools versions must be rebuilt (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4219\"\u003e#4219\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[VARC] Several fixes: derive component conditions from \u003ccode\u003econditionIndex\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4237\"\u003e#4237\u003c/a\u003e), set the implicit \u003ccode\u003escaleY\u003c/code\u003e when importing XML (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4238\"\u003e#4238\u003c/a\u003e), report the font's current coordinates for components that reset unspecified axes (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4239\"\u003e#4239\u003c/a\u003e), and keep inherited coordinates when drawing CFF2 VARC components (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4236\"\u003e#4236\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib] \u003ccode\u003ebuildMultiVarData\u003c/code\u003e accepts flattened per-region vector tuples (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4245\"\u003e#4245\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[otConverters] Bounds-check CFF2 INDEX count and \u003ccode\u003eoffSize\u003c/code\u003e on read, raising \u003ccode\u003eTTLibError\u003c/code\u003e instead of allocating huge lazy lists (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4220\"\u003e#4220\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[ttLib] Handle empty packed deltas when \u003ccode\u003eOPTIMIZE_FONT_SPEED\u003c/code\u003e is set (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4241\"\u003e#4241\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[scaleUpem] Scale per-glyph \u003ccode\u003eVORG\u003c/code\u003e origins (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4222\"\u003e#4222\u003c/a\u003e); fix VARC scaling for static fonts and condition variations (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4223\"\u003e#4223\u003c/a\u003e); don't mutate the shared default CFF \u003ccode\u003eFontMatrix\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4251\"\u003e#4251\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4252\"\u003e#4252\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[cmap] Fix format 2 compilation when all codes are single-byte (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/1524\"\u003e#1524\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4211\"\u003e#4211\u003c/a\u003e) or all single-byte codes map to \u003ccode\u003e.notdef\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4215\"\u003e#4215\u003c/a\u003e). Formats 2 and 4 now reject glyph IDs above 65535 instead of wrapping them (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4226\"\u003e#4226\u003c/a\u003e). Split format 14 default UVS ranges longer than 256 codepoints (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4229\"\u003e#4229\u003c/a\u003e). Empty format 12 and 13 subtables round-trip (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4246\"\u003e#4246\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[glyf] Use unsigned instruction lengths, so programs of 32768-65535 bytes compile and decompile correctly (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4227\"\u003e#4227\u003c/a\u003e). Keep instructions in zero-contour glyphs (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4228\"\u003e#4228\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[pens] Fix cubic off-curve detection in \u003ccode\u003eTTGlyphPointPen\u003c/code\u003e across contour starts (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4224\"\u003e#4224\u003c/a\u003e). \u003ccode\u003eGlyph.drawPoints()\u003c/code\u003e now raises \u003ccode\u003eNotImplementedError\u003c/code\u003e for an all-off-curve cubic contour, which the point pen protocol cannot express (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3191\"\u003e#3191\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4225\"\u003e#4225\u003c/a\u003e). \u003ccode\u003eRoundingPen\u003c/code\u003e passes the all-off-curve \u003ccode\u003eNone\u003c/code\u003e sentinel through (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4311\"\u003e#4311\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4312\"\u003e#4312\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[CFF2] Preserve operands when a blend has zero regions (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4240\"\u003e#4240\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[cffLib] Read CFF font names as Latin-1, matching how they are written (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4253\"\u003e#4253\u003c/a\u003e). Deleting a CFF dict attribute now actually removes it (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/2725\"\u003e#2725\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4264\"\u003e#4264\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[CFF2ToCFF] Fix conversion of fonts with local subroutines (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4258\"\u003e#4258\u003c/a\u003e). A CFF2 table with a single FontDict is now converted to a name-keyed CFF font that keeps its glyph names (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3890\"\u003e#3890\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4265\"\u003e#4265\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[subset] Handle a null GDEF variation store (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4230\"\u003e#4230\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[merge] Support merging fonts that both have a MATH table (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3823\"\u003e#3823\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4257\"\u003e#4257\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[feaLib] Reject the same mark class used twice in one anchor list (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3628\"\u003e#3628\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4255\"\u003e#4255\u003c/a\u003e). Don't crash on value records whose devices are all NULL (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/2396\"\u003e#2396\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4261\"\u003e#4261\u003c/a\u003e). Pad a short OS/2 \u003ccode\u003eVendor\u003c/code\u003e with spaces (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4259\"\u003e#4259\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[feaLib] Raise \u003ccode\u003eFeatureLibError\u003c/code\u003e with a location, instead of a bare Python error, for: a BASE script list without a matching tag list (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4263\"\u003e#4263\u003c/a\u003e), a \u003ccode\u003eUnicodeRange\u003c/code\u003e bit outside 0-127 (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4266\"\u003e#4266\u003c/a\u003e), a name string that cannot be decoded (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4267\"\u003e#4267\u003c/a\u003e), a STAT axis \u003ccode\u003elocation\u003c/code\u003e with no or too many values (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4268\"\u003e#4268\u003c/a\u003e), and a non-ASCII OS/2 \u003ccode\u003eVendor\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4269\"\u003e#4269\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[name] Fix the BCP 47 tags of some Mac and Windows language IDs, e.g. \u003ccode\u003ees\u003c/code\u003e was mapped to Mac Estonian (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3733\"\u003e#3733\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4256\"\u003e#4256\u003c/a\u003e). \u003ccode\u003egetDebugName\u003c/code\u003e prefers the Windows English name over the Mac one (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3969\"\u003e#3969\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4273\"\u003e#4273\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[post] Don't crash on a format 2.0 table with \u003ccode\u003enumGlyphs\u003c/code\u003e set to 0 (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3060\"\u003e#3060\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4274\"\u003e#4274\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[VDMX] Recompute \u003ccode\u003enumRecs\u003c/code\u003e and \u003ccode\u003enumRatios\u003c/code\u003e when compiling (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4293\"\u003e#4293\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[Silf] Fix compiling a \u003ccode\u003eSilf\u003c/code\u003e table that was decompiled from binary (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4294\"\u003e#4294\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[woff2] Preserve \u003ccode\u003eminorVersion\u003c/code\u003e when copying flavor data (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4249\"\u003e#4249\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4250\"\u003e#4250\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[ttGlyphSet] Compute glyph width lazily for glyf variable fonts without HVAR, so \u003ccode\u003e.width\u003c/code\u003e is correct before drawing (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3964\"\u003e#3964\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4260\"\u003e#4260\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.interpolatable] Respect designspace source layers (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3951\"\u003e#3951\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4275\"\u003e#4275\u003c/a\u003e); fix \u003ccode\u003e--json\u003c/code\u003e output with SciPy (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3870\"\u003e#3870\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4276\"\u003e#4276\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[misc.psLib] Fix tokenizing of escaped parentheses in PostScript strings (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4207\"\u003e#4207\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[svgLib] Raise \u003ccode\u003eValueError\u003c/code\u003e instead of \u003ccode\u003eIndexError\u003c/code\u003e on a truncated path command (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4254\"\u003e#4254\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[misc.transform] Preserve the direction of the remaining axis when decomposing a transform whose first column is zero (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4242\"\u003e#4242\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[misc.textTools] \u003ccode\u003eTag.__ne__\u003c/code\u003e returns \u003ccode\u003eNotImplemented\u003c/code\u003e for unsupported types (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4305\"\u003e#4305\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4306\"\u003e#4306\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[misc.dictTools] \u003ccode\u003ehashdict\u003c/code\u003e rejects in-place union (\u003ccode\u003e|=\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4313\"\u003e#4313\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4314\"\u003e#4314\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[misc.xmlReader] Close owned input streams when parsing fails (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4298\"\u003e#4298\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[misc.filesystem] \u003ccode\u003eWriteZipFS.close()\u003c/code\u003e can be called more than once (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4309\"\u003e#4309\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4310\"\u003e#4310\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[EBDT] Keep EBDT/CBDT glyph metrics after probing a missing attribute (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3806\"\u003e#3806\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4216\"\u003e#4216\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/fonttools/fonttools/blob/main/NEWS.rst\"\u003efonttools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.67.0 (released 2026-10-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[varLib] Support decreasing design-space axis mappings, via a new keyword-only\n\u003ccode\u003eallow_decreasing\u003c/code\u003e argument to \u003ccode\u003emodels.normalizeValue\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3970\"\u003e#3970\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4217\"\u003e#4217\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4243\"\u003e#4243\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[designspaceLib] Allow partial DesignSpace v5 axis subsets: omitted range attributes\non an \u003ccode\u003e\u0026lt;axis-subset\u0026gt;\u003c/code\u003e are taken from the parent axis, as the spec says (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[designspaceLib] Fix \u003ccode\u003eDesignSpaceDocument.normalize()\u003c/code\u003e for mapped axes: axis\nbounds and rule conditions are now normalized from their original values (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4218\"\u003e#4218\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[designspaceLib] \u003ccode\u003esplitInterpolable\u003c/code\u003e and \u003ccode\u003esplitVariableFonts\u003c/code\u003e now warn when a\nsource or instance is dropped because it lies outside the document's own axes,\ninstead of silently discarding it (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4244\"\u003e#4244\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Add support for instancing variable COLRv1 fonts (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/2699\"\u003e#2699\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4279\"\u003e#4279\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Apply VVAR vertical-origin deltas to \u003ccode\u003eVORG\u003c/code\u003e, and use OpenType\nrounding for instanced advances and vertical origins (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4221\"\u003e#4221\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Keep a universal FeatureVariations record when pinning removes\nits last condition but other axes remain (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4247\"\u003e#4247\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Preserve ppem \u003ccode\u003eDevice\u003c/code\u003e corrections in GDEF, BASE, GPOS and JSTF\ninstead of asserting on them (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4290\"\u003e#4290\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Allow requesting an axis's original range on VARC fonts (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4280\"\u003e#4280\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer, subset] Fold, remove or remap MATH \u003ccode\u003eVariationIndex\u003c/code\u003e devices\nwhen instancing, subsetting the GDEF store or optimizing it (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4288\"\u003e#4288\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib] Raise \u003ccode\u003eValueError: Missing required table fvar\u003c/code\u003e from \u003ccode\u003evarLib.mutator\u003c/code\u003e\nand the instancer CLI on a static font, instead of a bare \u003ccode\u003eKeyError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3751\"\u003e#3751\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4300\"\u003e#4300\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[featureVars] When adding \u003ccode\u003ervrn\u003c/code\u003e, also shift lookup indices inside existing\nFeatureVariations (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4233\"\u003e#4233\u003c/a\u003e). Handle null \u003ccode\u003eConditionSet\u003c/code\u003e and\n\u003ccode\u003eFeatureTableSubstitution\u003c/code\u003e offsets when building, subsetting and instancing\n(\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4234\"\u003e#4234\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4235\"\u003e#4235\u003c/a\u003e). Keep \u003ccode\u003eFeatureTableSubstitution\u003c/code\u003e records sorted after merging new\nones into an existing record (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4248\"\u003e#4248\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[ttLib] Fix FeatureParams (\u003ccode\u003esize\u003c/code\u003e, \u003ccode\u003essXX\u003c/code\u003e, \u003ccode\u003ecvXX\u003c/code\u003e) in FeatureVariations\nalternate feature tables, which failed to compile and round-trip (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3623\"\u003e#3623\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4278\"\u003e#4278\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[ttLib] Fully decode lazily loaded ligatures, \u003ccode\u003eSinglePos\u003c/code\u003e and \u003ccode\u003ePairPos\u003c/code\u003e arrays\nduring recursive decompilation, so \u003ccode\u003ereorderGlyphs()\u003c/code\u003e on a lazy font no longer\ncorrupts or asserts on them (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4231\"\u003e#4231\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4232\"\u003e#4232\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[VARC] Update the variation-store binary format to follow\n\u003ca href=\"https://redirect.github.com/harfbuzz/boring-expansion-spec/issues/175\"\u003eharfbuzz/boring-expansion-spec#175\u003c/a\u003e: \u003ccode\u003eSparseVarRegionList.RegionCount\u003c/code\u003e is uint32,\nsparse axes use Offset32 and \u003ccode\u003eMultiVarData\u003c/code\u003e items are stored in an INDEX. VARC\nfonts built with earlier fontTools versions must be rebuilt (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4219\"\u003e#4219\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[VARC] Several fixes: derive component conditions from \u003ccode\u003econditionIndex\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4237\"\u003e#4237\u003c/a\u003e),\nset the implicit \u003ccode\u003escaleY\u003c/code\u003e when importing XML (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4238\"\u003e#4238\u003c/a\u003e), report the font's current\ncoordinates for components that reset unspecified axes (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4239\"\u003e#4239\u003c/a\u003e), and keep inherited\ncoordinates when drawing CFF2 VARC components (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4236\"\u003e#4236\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib] \u003ccode\u003ebuildMultiVarData\u003c/code\u003e accepts flattened per-region vector tuples (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4245\"\u003e#4245\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[otConverters] Bounds-check CFF2 INDEX count and \u003ccode\u003eoffSize\u003c/code\u003e on read, raising\n\u003ccode\u003eTTLibError\u003c/code\u003e instead of allocating huge lazy lists (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4220\"\u003e#4220\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[ttLib] Handle empty packed deltas when \u003ccode\u003eOPTIMIZE_FONT_SPEED\u003c/code\u003e is set (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4241\"\u003e#4241\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[scaleUpem] Scale per-glyph \u003ccode\u003eVORG\u003c/code\u003e origins (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4222\"\u003e#4222\u003c/a\u003e); fix VARC scaling for static\nfonts and condition variations (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4223\"\u003e#4223\u003c/a\u003e); don't mutate the shared default CFF\n\u003ccode\u003eFontMatrix\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4251\"\u003e#4251\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4252\"\u003e#4252\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[cmap] Fix format 2 compilation when all codes are single-byte (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/1524\"\u003e#1524\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4211\"\u003e#4211\u003c/a\u003e) or\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/16f88cb09446ab617a1a788e48ae12e0f0ec5217\"\u003e\u003ccode\u003e16f88cb\u003c/code\u003e\u003c/a\u003e Release 4.67.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/5049c83959de649b5cda2a4b7d1da3cc3436079b\"\u003e\u003ccode\u003e5049c83\u003c/code\u003e\u003c/a\u003e Update NEWS.rst [skip ci]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/fdfd15f959c2a263163e13db917b58c9e4844548\"\u003e\u003ccode\u003efdfd15f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4314\"\u003e#4314\u003c/a\u003e from xiehuanyi/fix/hashdict-inplace-union-20261014\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/87ee7d321f456039fe7ae7d9b9a87b164c051e21\"\u003e\u003ccode\u003e87ee7d3\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4312\"\u003e#4312\u003c/a\u003e from xiehuanyi/fix/roundingpen-offcurve-none-20261014\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/e6e65d3748f8af2a9e3685c0cae915d9f20112c4\"\u003e\u003ccode\u003ee6e65d3\u003c/code\u003e\u003c/a\u003e [dictTools] Reject in-place union on hashdict\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/10cfefe61a82824662296f447bec1f8503a313d6\"\u003e\u003ccode\u003e10cfefe\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4310\"\u003e#4310\u003c/a\u003e from xiehuanyi/fix/writezipfs-idempotent-close-20261014\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/06157e4d91539f7bac16aaa306fc53ca61b9792b\"\u003e\u003ccode\u003e06157e4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4300\"\u003e#4300\u003c/a\u003e from CAOShurong/codex/3751-missing-fvar\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/2940a2e5260489a7fd9045cf2cfc329b1db151d3\"\u003e\u003ccode\u003e2940a2e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4298\"\u003e#4298\u003c/a\u003e from xiehuanyi/fix-xml-reader-failure-cleanup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/821805d066d548b32334841fcc0de5f5c8b24b5b\"\u003e\u003ccode\u003e821805d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4306\"\u003e#4306\u003c/a\u003e from xiehuanyi/fix/tag-notimplemented-comparison-202...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/85538d641a2babe23e31b37b2aa32d0a271ec2b0\"\u003e\u003ccode\u003e85538d6\u003c/code\u003e\u003c/a\u003e [roundingPen] Preserve all-off-curve quadratic sentinel\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fonttools/fonttools/compare/4.66.1...4.67.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `granian` from 2.8.4 to 2.8.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/emmett-framework/granian/releases\"\u003egranian's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eGranian 2.8.5\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePatch release\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eChanges since 2.8.4:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRefactor static files path pattern matching on Windows\u003c/li\u003e\n\u003cli\u003eFix a shadowing bug in static files url routing\u003c/li\u003e\n\u003cli\u003eUpdate backlog parameter documentation (\u003ca href=\"https://redirect.github.com/emmett-framework/granian/issues/936\"\u003e#936\u003c/a\u003e by \u003ca href=\"https://github.com/RealOrangeOne\"\u003e\u003ccode\u003e@​RealOrangeOne\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix IPv6 client address formatting in access log (\u003ca href=\"https://redirect.github.com/emmett-framework/granian/issues/933\"\u003e#933\u003c/a\u003e by \u003ca href=\"https://github.com/NotAFlightRisk\"\u003e\u003ccode\u003e@​NotAFlightRisk\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix a bug in workers kill timeout budget math (\u003ca href=\"https://redirect.github.com/emmett-framework/granian/issues/939\"\u003e#939\u003c/a\u003e by \u003ca href=\"https://github.com/Shaisolaris\"\u003e\u003ccode\u003e@​Shaisolaris\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix asyncio event loop cleanup in threaded workers (\u003ca href=\"https://redirect.github.com/emmett-framework/granian/issues/940\"\u003e#940\u003c/a\u003e by \u003ca href=\"https://github.com/Shaisolaris\"\u003e\u003ccode\u003e@​Shaisolaris\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix mimalloc CFLAGS on MacOS wheels\u003c/li\u003e\n\u003cli\u003eBump dependencies\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/59cbc26734634c9e9089180f3fd4469adde214de\"\u003e\u003ccode\u003e59cbc26\u003c/code\u003e\u003c/a\u003e Close the loop on threaded workers shutdown (\u003ca href=\"https://redirect.github.com/emmett-framework/granian/issues/940\"\u003e#940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/5116380582a9a57d5a3f877992614a2d0fbd3c9b\"\u003e\u003ccode\u003e5116380\u003c/code\u003e\u003c/a\u003e Refactor static file path checker in win, fix a shadowing issue\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/3a11d2604240587efbc32702f8f8db9a0c54cdba\"\u003e\u003ccode\u003e3a11d26\u003c/code\u003e\u003c/a\u003e Bump PyO3 to 0.30\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/438950fff1df9d0e2ee0f236e5a05b8b566c4303\"\u003e\u003ccode\u003e438950f\u003c/code\u003e\u003c/a\u003e Keep the worker kill budget from shrinking twice (\u003ca href=\"https://redirect.github.com/emmett-framework/granian/issues/939\"\u003e#939\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/c497384fb2d0765a1b5c086ea6ac9539c9698a3f\"\u003e\u003ccode\u003ec497384\u003c/code\u003e\u003c/a\u003e Fix CFLAGS for mimalloc builds on MacOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/a7483f440076b37886517bc67d8fac8d9a653296\"\u003e\u003ccode\u003ea7483f4\u003c/code\u003e\u003c/a\u003e Bump dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/50e6fbf2cf926d7956bb716796cd9ecc33ef7d31\"\u003e\u003ccode\u003e50e6fbf\u003c/code\u003e\u003c/a\u003e Use bash shell on Windows in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/d8a50159eeb797e7f73d7885824808f51024c877\"\u003e\u003ccode\u003ed8a5015\u003c/code\u003e\u003c/a\u003e Fix IPv6 client addresses in WSGI access log (\u003ca href=\"https://redirect.github.com/emmett-framework/granian/issues/933\"\u003e#933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/78e43a8a416e3f28e643ca245fd8b32ff9b8cc9d\"\u003e\u003ccode\u003e78e43a8\u003c/code\u003e\u003c/a\u003e Update backlog help text to reference that it's per worker for TCP sockets (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/4213f91589270d5657979512310ef71b129bccac\"\u003e\u003ccode\u003e4213f91\u003c/code\u003e\u003c/a\u003e Bump version to 2.8.5\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/emmett-framework/granian/compare/v2.8.4...v2.8.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `numpy` from 2.5.3 to 2.5.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/releases\"\u003enumpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.5.4 (Oct 10,  2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.5.4 Release Notes\u003c/h1\u003e\n\u003cp\u003e\u003cem\u003eReleased on 2026-10-10.\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eNumPy 2.5.4 is a patch release that fixes bugs discovered after the 2.5.3\nrelease. Highlights are:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMany typing fixes and improvements,\u003c/li\u003e\n\u003cli\u003eA workaround for the MSVC 19.51 bug, see below.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThis release supports Python versions 3.12-3.15.\u003c/p\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003enumpy.linalg.svd\u003c/code\u003e and \u003ccode\u003enumpy.linalg.lstsq\u003c/code\u003e now raise for inputs containing\ninfinities instead of returning garbage results.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed hangs in \u003ccode\u003enumpy.linalg.svd\u003c/code\u003e and \u003ccode\u003enumpy.linalg.lstsq\u003c/code\u003e for certain inputs\ncontaining infinities for recent versions of some LAPACK implementations.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003enumpy.linalg.cond\u003c/code\u003e now handles non-finite inputs more consistently.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32593\"\u003egh-32593\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eStringDType hashing with NaN sentinels\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eStringDType\u003c/code\u003e instances with equivalent floating-point NaN sentinels now\nhave equal hashes. Previously, distinct NaN objects could produce equal\ndtype instances with different hashes, causing dictionary lookups and set\ndeduplication to fail.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32563\"\u003egh-32563\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003ch3\u003e\u003ccode\u003eMaskedArray\u003c/code\u003e resets a fill_value that cannot be represented in a new dtype\u003c/h3\u003e\n\u003cp\u003eA fill_value copied from a source array is now reset to the default fill_value\nfor the new dtype when it cannot be represented in that dtype. Previously the\ncopied value could be stale: ufuncs that change dtype left the result holding a\nfill_value typed for the old dtype, which raised a \u003ccode\u003eTypeError\u003c/code\u003e only when\nsomething later validated it (such as \u003ccode\u003e.view()\u003c/code\u003e), and a floating point\nfill_value that overflows an integer dtype was kept as an out-of-range value\ntogether with a \u003ccode\u003eRuntimeWarning\u003c/code\u003e. Both now fall back to the default,\nincluding when a masked array is passed to \u003ccode\u003eMaskedArray\u003c/code\u003e with a different\n\u003ccode\u003edtype\u003c/code\u003e. A fill_value given explicitly by the user is still validated and\nraises as before. This can now raise a \u003ccode\u003eComplexWarning\u003c/code\u003e if the fill_value is\ncomplex and the new dtype is real.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/a3d0ef1df045b858e68115001fdabc930bb3b68c\"\u003e\u003ccode\u003ea3d0ef1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32969\"\u003e#32969\u003c/a\u003e from charris/prepare-2.5.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/087b5367c84b5296c32c26c415438d87d3888586\"\u003e\u003ccode\u003e087b536\u003c/code\u003e\u003c/a\u003e MAINT: Make OpenBLAS version check use 2.5.x branch.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/91acd879242a679604579895d490c26f864a4b03\"\u003e\u003ccode\u003e91acd87\u003c/code\u003e\u003c/a\u003e REL: Prepare for the NumPy 2.5.4 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/9cc555bae07244551829c3a4eb7a635bef6345b3\"\u003e\u003ccode\u003e9cc555b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32956\"\u003e#32956\u003c/a\u003e from charris/backport-typing-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/e04b972a306136b8ac9219be199948badafa3475\"\u003e\u003ccode\u003ee04b972\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003edtype[void].names\u003c/code\u003e: allow setting with list (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32943\"\u003e#32943\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/d9299693d20c3fd1aa83b9464d074632cf59aaac\"\u003e\u003ccode\u003ed929969\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003etimedelta64\u003c/code\u003e: \u003ccode\u003edatetime.timedelta\u003c/code\u003e construction isn't deprecated (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/839467fdbcc1d68b68f4fe2a61d3387107c78394\"\u003e\u003ccode\u003e839467f\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003ema.getmaskarray\u003c/code\u003e: accept array-likes (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32934\"\u003e#32934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/64b721b23f51543ed9316a5fd21a48734760b429\"\u003e\u003ccode\u003e64b721b\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003epolynomial\u003c/code\u003e: accept scalar \u003ccode\u003ecoef\u003c/code\u003e in the poly constructors (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32931\"\u003e#32931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/06b7ad226e41b71919b2d35c50063998eced0b9d\"\u003e\u003ccode\u003e06b7ad2\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003evoid\u003c/code\u003e: accept any \u003ccode\u003edtype: str\u003c/code\u003e in constructor calls (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32928\"\u003e#32928\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/c7bcd2c0aaca732b87575829cc61508076de1af5\"\u003e\u003ccode\u003ec7bcd2c\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003eplace\u003c/code\u003e: widen \u003ccode\u003emask\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32926\"\u003e#32926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/numpy/numpy/compare/v2.5.3...v2.5.4\"\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.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...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-settings` from 2.15.0 to 2.16.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.16.1\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThis patch release fixes two CLI regressions introduced in 2.16.0.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed-length tuple positionals such as \u003ccode\u003eCliPositionalArg[tuple[int, int]]\u003c/code\u003e and \u003ccode\u003eNamedTuple\u003c/code\u003es are single-valued again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1069\"\u003e#1069\u003c/a\u003e). Since 2.16.0 they were treated as variadic, so a CLI either refused to start with a \u003ccode\u003eSettingsError\u003c/code\u003e or put the wrong argument into the tuple. Variable-length tuples (\u003ccode\u003etuple[int, ...]\u003c/code\u003e and bare \u003ccode\u003eTuple\u003c/code\u003e) are still variadic.\u003c/li\u003e\n\u003cli\u003eA field typed as an alias of a list of dicts, e.g. \u003ccode\u003etype ListOfDict = list[dict[str, int]]\u003c/code\u003e, accepts a JSON list again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1049\"\u003e#1049\u003c/a\u003e). Since 2.16.0, \u003ccode\u003e--xx '[{\u0026quot;a\u0026quot;:1},{\u0026quot;b\u0026quot;:2}]'\u003c/code\u003e was merged into the single dict \u003ccode\u003e{\u0026quot;a\u0026quot;: 1, \u0026quot;b\u0026quot;: 2}\u003c/code\u003e and failed validation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden CI by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1044\"\u003epydantic/pydantic-settings#1044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep list of dicts CLI values as lists 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/1049\"\u003epydantic/pydantic-settings#1049\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep fixed-length tuple CLI positionals single-valued 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/1069\"\u003epydantic/pydantic-settings#1069\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.16.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/1087\"\u003epydantic/pydantic-settings#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1056\"\u003epydantic/pydantic-settings#1056\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.16.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBreaking changes and behavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.10 is no longer supported\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1003\"\u003e#1003\u003c/a\u003e). pydantic-settings now requires Python 3.11+, since 3.10 reaches end of life this month. The \u003ccode\u003etomli\u003c/code\u003e fallback is gone in favor of stdlib \u003ccode\u003etomllib\u003c/code\u003e; the \u003ccode\u003etoml\u003c/code\u003e extra is kept as an empty extra so \u003ccode\u003epip install pydantic-settings[toml]\u003c/code\u003e keeps working.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003epython-dotenv\u0026gt;=1.2.2\u003c/code\u003e is now required\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/971\"\u003e#971\u003c/a\u003e) to pick up the fix for CVE-2026-28684.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAliases are ignored in every source when \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1033\"\u003e#1033\u003c/a\u003e). Env vars, secrets, CLI flags and defaults now use only field names, matching pydantic. An env var named after the alias is now ignored instead of raising \u003ccode\u003eextra_forbidden\u003c/code\u003e, and the CLI exposes \u003ccode\u003e--apple\u003c/code\u003e rather than \u003ccode\u003e--pomo\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003evalidation_alias\u003c/code\u003e takes precedence over \u003ccode\u003ealias\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1038\"\u003e#1038\u003c/a\u003e). When the two differ, values from JSON/YAML/TOML files and the CLI were silently ignored; they now load. CLI help lists the \u003ccode\u003evalidation_alias\u003c/code\u003e flag first, and \u003ccode\u003eCliApp.serialize\u003c/code\u003e emits it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCLI case-insensitivity only lowercases registered options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1036\"\u003e#1036\u003c/a\u003e). With \u003ccode\u003ecase_sensitive=False\u003c/code\u003e, args after \u003ccode\u003e--\u003c/code\u003e and those captured by \u003ccode\u003eCliUnknownArgs\u003c/code\u003e keep their case (\u003ccode\u003e-Xmx4G\u003c/code\u003e no longer becomes \u003ccode\u003e-xmx4g\u003c/code\u003e). Unrecognized options are now reported as typed (\u003ccode\u003e--NOPE\u003c/code\u003e instead of \u003ccode\u003e--nope\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eJSON and YAML config files are read as UTF-8 by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/955\"\u003e#955\u003c/a\u003e) instead of the locale encoding, completing the secrets-file fix from 2.15.0. \u003ccode\u003ejson_file_encoding\u003c/code\u003e/\u003ccode\u003eyaml_file_encoding\u003c/code\u003e still override it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDiscriminated union defaults are partially updated again\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/997\"\u003e#997\u003c/a\u003e). This reverts the 2.15.0 regression with \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e: the default is only dropped when the incoming value selects a \u003cem\u003edifferent\u003c/em\u003e union member.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.15 and pydantic 2.14 support\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1026\"\u003e#1026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1029\"\u003e#1029\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1022\"\u003e#1022\u003c/a\u003e). pydantic 2.14 broke \u003ccode\u003eCliApp.run\u003c/code\u003e and \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e handling; both are fixed.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCached settings instances\u003c/strong\u003e via \u003ccode\u003eSettings.settings_cached()\u003c/code\u003e and \u003ccode\u003eSettings.settings_clear_cache()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/952\"\u003e#952\u003c/a\u003e). These give you a process-local singleton per settings class without hand-rolling \u003ccode\u003elru_cache\u003c/code\u003e wrappers. Calling the class directly still builds a fresh instance.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAWS Systems Manager Parameter Store source\u003c/strong\u003e — \u003ccode\u003eAWSSystemsManagerSettingsSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/941\"\u003e#941\u003c/a\u003e). It recursively reads every parameter under an \u003ccode\u003essm_path\u003c/code\u003e, with \u003ccode\u003e/\u003c/code\u003e mapping onto nested models. Install it with the new \u003ccode\u003eaws-systems-manager\u003c/code\u003e extra.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenv_file_depth\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/940\"\u003e#940\u003c/a\u003e) lets a relative \u003ccode\u003eenv_file\u003c/code\u003e be found in parent directories, mirroring \u003ccode\u003epyproject_toml_depth\u003c/code\u003e. This is useful when scripts run from a subdirectory of a monorepo. It defaults to \u003ccode\u003e0\u003c/code\u003e, which keeps the current behavior.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eCliVariadicArg\u003c/code\u003e for named variadic options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/949\"\u003e#949\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/958\"\u003e#958\u003c/a\u003e). It accepts \u003ccode\u003e--param a b c\u003c/code\u003e in addition to repeated \u003ccode\u003e--param a --param b\u003c/code\u003e. Required fields need at least one value.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4e286e284fe43f0fb86872b91f708d3dd5356bfc\"\u003e\u003ccode\u003e4e286e2\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1087\"\u003e#1087\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/993b59e1682799d5ad33b721b7158718b6278944\"\u003e\u003ccode\u003e993b59e\u003c/code\u003e\u003c/a\u003e Keep fixed-length tuple CLI positionals single-valued (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1069\"\u003e#1069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f651a7a57a0e3b26147da02f2fda2d05f8c34cce\"\u003e\u003ccode\u003ef651a7a\u003c/code\u003e\u003c/a\u003e Keep list of dicts CLI values as lists (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1049\"\u003e#1049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ecf7d90bf1b1b71f2875f607c1668c44f576bf9c\"\u003e\u003ccode\u003eecf7d90\u003c/code\u003e\u003c/a\u003e Harden CI (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1044\"\u003e#1044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8c259f41b49b4cefbe4fb676d3c1f52dddd3cca8\"\u003e\u003ccode\u003e8c259f4\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1043\"\u003e#1043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4bc667ada383aca4df00304cd171f327a9fae163\"\u003e\u003ccode\u003e4bc667a\u003c/code\u003e\u003c/a\u003e Keep case of non-option CLI args when case_sensitive=False (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f75a8057a5fafe4aef3a042c2adf367c6987f73f\"\u003e\u003ccode\u003ef75a805\u003c/code\u003e\u003c/a\u003e Simplify alias resolution branch and test alias with AliasChoices/AliasPath (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/cfdc5585e821e84905905027de68a0188213537a\"\u003e\u003ccode\u003ecfdc558\u003c/code\u003e\u003c/a\u003e Honor env_parse_none_str for GCP Secret Manager (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1040\"\u003e#1040\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/081d39f9c73f46e68bc2bef75a23f7d84ed0c377\"\u003e\u003ccode\u003e081d39f\u003c/code\u003e\u003c/a\u003e Fix config file and CLI values being ignored when alias differs from validati...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c46ebc4cc599c09f3692f4d2e82a8f0bb5433f3a\"\u003e\u003ccode\u003ec46ebc4\u003c/code\u003e\u003c/a\u003e Expand home paths when checking TOML table headers (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.15.0...v2.16.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opendal` from 0.47.10 to 0.47.12\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/apache/opendal/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asyncpg` from 0.31.0 to 0.32.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/MagicStack/asyncpg/re...\n\n_Description has been truncated_","html_url":"https://github.com/Team-Haruki/Haruki-Drawing-API/pull/181","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Team-Haruki%2FHaruki-Drawing-API/issues/181","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/181/packages"},{"uuid":"6029797822","node_id":"PR_kwDORlbIXc8AAAABKpDfig","number":411,"state":"closed","title":"build(deps): Bump the production-minor-and-patch group across 1 directory with 19 updates","user":"dependabot[bot]","labels":["backend","dependencies"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-10-25T22:16:57.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-25T21:56:05.000Z","updated_at":"2026-10-25T22:17:01.000Z","time_to_close":1252,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): Bump","group_name":"production-minor-and-patch","update_count":19,"packages":[{"name":"fastapi","old_version":"0.142.2","new_version":"0.161.0","repository_url":"https://github.com/fastapi/fastapi"},{"name":"google-genai","old_version":"2.27.0","new_version":"2.32.0","repository_url":"https://github.com/googleapis/python-genai"},{"name":"pydantic","old_version":"2.13.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.15.0","new_version":"2.16.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"langchain","old_version":"1.4.3","new_version":"1.4.7","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-openai","old_version":"1.6.7","new_version":"1.7.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-google-genai","old_version":"4.4.0","new_version":"4.4.2","repository_url":"https://github.com/langchain-ai/langchain-google"},{"name":"langchain-anthropic","old_version":"1.7.5","new_version":"1.7.6","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"boto3","old_version":"1.43.107","new_version":"1.43.118","repository_url":"https://github.com/boto/boto3"},{"name":"sqlmodel","old_version":"0.0.47","new_version":"0.0.48","repository_url":"https://github.com/fastapi/sqlmodel"},{"name":"alembic","old_version":"1.20.0","new_version":"1.20.1","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"sentry-sdk","old_version":"2.71.0","new_version":"2.73.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"dlt","old_version":"1.30.0","new_version":"1.31.0","repository_url":"https://github.com/dlt-hub/dlt"},{"name":"selectolax","old_version":"1.0.0","new_version":"1.0.2","repository_url":"https://github.com/rushter/selectolax"},{"name":"trafilatura","old_version":"2.2.0","new_version":"2.3.1","repository_url":"https://github.com/adbar/trafilatura"},{"name":"headroom-ai","old_version":"0.39.1","new_version":"0.41.0","repository_url":"https://github.com/headroomlabs-ai/headroom"},{"name":"deepagents","old_version":"0.7.23","new_version":"0.7.30","repository_url":"https://github.com/langchain-ai/deepagents"},{"name":"reportlab","old_version":"5.0.1","new_version":"5.1.0"},{"name":"cloudflare","old_version":"5.8.0","new_version":"5.9.0","repository_url":"https://github.com/cloudflare/cloudflare-python"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-minor-and-patch group with 19 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.142.2` | `0.161.0` |\n| [google-genai](https://github.com/googleapis/python-genai) | `2.27.0` | `2.32.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.5` | `2.14.1` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.15.0` | `2.16.1` |\n| [langchain](https://github.com/langchain-ai/langchain) | `1.4.3` | `1.4.7` |\n| [langchain-openai](https://github.com/langchain-ai/langchain) | `1.6.7` | `1.7.2` |\n| [langchain-google-genai](https://github.com/langchain-ai/langchain-google) | `4.4.0` | `4.4.2` |\n| [langchain-anthropic](https://github.com/langchain-ai/langchain) | `1.7.5` | `1.7.6` |\n| [boto3](https://github.com/boto/boto3) | `1.43.107` | `1.43.118` |\n| [sqlmodel](https://github.com/fastapi/sqlmodel) | `0.0.47` | `0.0.48` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.20.0` | `1.20.1` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.71.0` | `2.73.0` |\n| [dlt](https://github.com/dlt-hub/dlt) | `1.30.0` | `1.31.0` |\n| [selectolax](https://github.com/rushter/selectolax) | `1.0.0` | `1.0.2` |\n| [trafilatura](https://github.com/adbar/trafilatura) | `2.2.0` | `2.3.1` |\n| [headroom-ai](https://github.com/headroomlabs-ai/headroom) | `0.39.1` | `0.41.0` |\n| [deepagents](https://github.com/langchain-ai/deepagents) | `0.7.23` | `0.7.30` |\n| [reportlab](https://www.reportlab.com/) | `5.0.1` | `5.1.0` |\n| [cloudflare](https://github.com/cloudflare/cloudflare-python) | `5.8.0` | `5.9.0` |\n\n\nUpdates `fastapi` from 0.142.2 to 0.161.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.161.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16596\"\u003e#16596\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.160.0\u003c/h2\u003e\n\u003cp\u003eQuery, header, cookie, and form parameter models now apply their \u003ccode\u003eextra\u003c/code\u003e configuration to all submitted fields in the same parameter location, consistent with Pydantic behavior. This includes fields declared in other models, individual parameters, or dependencies, which were previously excluded.\u003c/p\u003e\n\u003cp\u003eWith \u003ccode\u003eextra=\u0026quot;forbid\u0026quot;\u003c/code\u003e, fields outside the model are rejected even if another parameter declares them. With \u003ccode\u003eextra=\u0026quot;allow\u0026quot;\u003c/code\u003e, those fields are included as model extras. With the default \u003ccode\u003eextra=\u0026quot;ignore\u0026quot;\u003c/code\u003e, they are ignored.\u003c/p\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16594\"\u003e#16594\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump certifi from 2026.1.4 to 2026.10.19. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16571\"\u003e#16571\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.159.1\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16586\"\u003e#16586\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.159.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16584\"\u003e#16584\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.158.2\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16582\"\u003e#16582\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.158.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Preserve form media types in OpenAPI. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16579\"\u003e#16579\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.158.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16577\"\u003e#16577\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.157.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16573\"\u003e#16573\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\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/80c8742d141e67beaf747343405c8facf999bc0c\"\u003e\u003ccode\u003e80c8742\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.161.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16597\"\u003e#16597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b105209dbf32d1e25ff7357ab706490dcafc9c44\"\u003e\u003ccode\u003eb105209\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e42ac0a13459086f42d96eab13748303bcfa78e7\"\u003e\u003ccode\u003ee42ac0a\u003c/code\u003e\u003c/a\u003e ✨ Add support for combining unions of form models (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16596\"\u003e#16596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/addd0778e996cf886972b8024113d79f8d0a3580\"\u003e\u003ccode\u003eaddd077\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.160.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16595\"\u003e#16595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/352a4edff3f4362f28c42da29e0879846f6f637e\"\u003e\u003ccode\u003e352a4ed\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/91a335ce946c7a832da973f2acf69b8876594216\"\u003e\u003ccode\u003e91a335c\u003c/code\u003e\u003c/a\u003e 🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16594\"\u003e#16594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ce6ee83e5411b98582e996e47edf7870418a68f4\"\u003e\u003ccode\u003ece6ee83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/97858ed7df0d27d5cc3e6c648bd6f0f9cdf25b1f\"\u003e\u003ccode\u003e97858ed\u003c/code\u003e\u003c/a\u003e ⬆ Bump certifi from 2026.1.4 to 2026.10.19 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16571\"\u003e#16571\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4bdfbe4513084b19e22421ce1f916d8c1ac462a0\"\u003e\u003ccode\u003e4bdfbe4\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.159.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16588\"\u003e#16588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b169d23e7d65c99ce83e1cf5c6e76f3f585c6017\"\u003e\u003ccode\u003eb169d23\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.142.2...0.161.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-genai` from 2.27.0 to 2.32.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-genai/releases\"\u003egoogle-genai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.32.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.31.0...v2.32.0\"\u003e2.32.0\u003c/a\u003e (2026-10-21)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd base_voice to PromptedVoice in GAOS SDK (\u003ca href=\"https://github.com/googleapis/python-genai/commit/548864370ee9c88de0bd839b619dc05bcb7085e7\"\u003e5488643\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd generation_output_config to GenerateContentConfig (\u003ca href=\"https://github.com/googleapis/python-genai/commit/5c008e14b9c9fdecbaf61eb53ad7c09f57fa5f8a\"\u003e5c008e1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Live API in-session context updates (\u003ccode\u003esend_context_update\u003c/code\u003e) and types across GenAI SDKs. (\u003ca href=\"https://github.com/googleapis/python-genai/commit/364889aafe40bfa8f3b9db847ba272d299f7d632\"\u003e364889a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003esdks:\u003c/strong\u003e Enable \u003ccode\u003efixes.openSingleValueEnumsOct2026\u003c/code\u003e across all SDKs (\u003ca href=\"https://github.com/googleapis/python-genai/commit/78f6d3412caaaed44f99ce57be2d16d0b8c407cb\"\u003e78f6d34\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate discovery doc (\u003ca href=\"https://github.com/googleapis/python-genai/commit/6cd176e135a188bbb0d0f9afca520e7d6483823d\"\u003e6cd176e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBase64-encode inline bytes in Live send_tool_response (\u003ca href=\"https://github.com/googleapis/python-genai/commit/a7bbff6e73fa9444802cd9a17e8c94e30341bf5d\"\u003ea7bbff6\u003c/a\u003e), refs \u003ca href=\"https://redirect.github.com/googleapis/python-genai/issues/3022\"\u003e#3022\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash parsing responses with JSON objects in \u003ccode\u003eAny\u003c/code\u003e-typed fields (\u003ca href=\"https://github.com/googleapis/python-genai/commit/4c1abccf258c9247218e66610790043893cd6950\"\u003e4c1abcc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einteractions:\u003c/strong\u003e Sync InteractionSseEventInteractionStatus enum with InteractionStatus (\u003ca href=\"https://github.com/googleapis/python-genai/commit/ba854b2d29a3ff0d4758da886edabb458726b210\"\u003eba854b2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePublish the API reference on each release (\u003ca href=\"https://github.com/googleapis/python-genai/commit/1d12358a1398b9a510ae8ba25dd31e746d8e9be9\"\u003e1d12358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTransition docs workflow to GitHub Actions (\u003ca href=\"https://github.com/googleapis/python-genai/commit/3b1256ac5f4b8c49a469ca307ca765185184774d\"\u003e3b1256a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.31.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.30.1...v2.31.0\"\u003e2.31.0\u003c/a\u003e (2026-10-14)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003einteractions:\u003c/strong\u003e Add gemini-4-argon to Model enum (\u003ca href=\"https://github.com/googleapis/python-genai/commit/8554b07d0025e19361b7a10a6384cc143f3a8ea9\"\u003e8554b07\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eClear continuation state and preserve prompt feedback when continuation hop returns no candidates (\u003ca href=\"https://github.com/googleapis/python-genai/commit/a0d809cd838ec02938c1646c47cc3ece2761fc09\"\u003ea0d809c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix the function declaration parser for union types. Fixes \u003ca href=\"https://redirect.github.com/googleapis/python-genai/issues/3060\"\u003e#3060\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/python-genai/commit/be32e9e074e6a403621a6d52ae97f81f0777549e\"\u003ebe32e9e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix the grounding metadata merging for automatic continuation in generate content and generate content stream (\u003ca href=\"https://github.com/googleapis/python-genai/commit/f1499bb86c707d51b5b2684ff9423653cc74895c\"\u003ef1499bb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake continuation streams retry dropped hops, stop on prompt_feedback, and keep real errors in generate_content (\u003ca href=\"https://github.com/googleapis/python-genai/commit/339a92921ac877d07d34a3646cddefdf9c71565c\"\u003e339a929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch the mTLS endpoint to each transport's SSL context, including plain aiohttp (\u003ca href=\"https://github.com/googleapis/python-genai/commit/f8a469322cf66716ca3345c14516c0daa213ca1c\"\u003ef8a4693\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.30.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.30.0...v2.30.1\"\u003e2.30.1\u003c/a\u003e (2026-10-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eConcatenate output_text across multi-step model responses in a turn (\u003ca href=\"https://github.com/googleapis/python-genai/commit/180c3453f91e4734b828534950fa7f8526934b59\"\u003e180c345\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-genai/blob/main/CHANGELOG.md\"\u003egoogle-genai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.31.0...v2.32.0\"\u003e2.32.0\u003c/a\u003e (2026-10-21)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd base_voice to PromptedVoice in GAOS SDK (\u003ca href=\"https://github.com/googleapis/python-genai/commit/548864370ee9c88de0bd839b619dc05bcb7085e7\"\u003e5488643\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd generation_output_config to GenerateContentConfig (\u003ca href=\"https://github.com/googleapis/python-genai/commit/5c008e14b9c9fdecbaf61eb53ad7c09f57fa5f8a\"\u003e5c008e1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Live API in-session context updates (\u003ccode\u003esend_context_update\u003c/code\u003e) and types across GenAI SDKs. (\u003ca href=\"https://github.com/googleapis/python-genai/commit/364889aafe40bfa8f3b9db847ba272d299f7d632\"\u003e364889a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003esdks:\u003c/strong\u003e Enable \u003ccode\u003efixes.openSingleValueEnumsOct2026\u003c/code\u003e across all SDKs (\u003ca href=\"https://github.com/googleapis/python-genai/commit/78f6d3412caaaed44f99ce57be2d16d0b8c407cb\"\u003e78f6d34\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate discovery doc (\u003ca href=\"https://github.com/googleapis/python-genai/commit/6cd176e135a188bbb0d0f9afca520e7d6483823d\"\u003e6cd176e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBase64-encode inline bytes in Live send_tool_response (\u003ca href=\"https://github.com/googleapis/python-genai/commit/a7bbff6e73fa9444802cd9a17e8c94e30341bf5d\"\u003ea7bbff6\u003c/a\u003e), refs \u003ca href=\"https://redirect.github.com/googleapis/python-genai/issues/3022\"\u003e#3022\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash parsing responses with JSON objects in \u003ccode\u003eAny\u003c/code\u003e-typed fields (\u003ca href=\"https://github.com/googleapis/python-genai/commit/4c1abccf258c9247218e66610790043893cd6950\"\u003e4c1abcc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einteractions:\u003c/strong\u003e Sync InteractionSseEventInteractionStatus enum with InteractionStatus (\u003ca href=\"https://github.com/googleapis/python-genai/commit/ba854b2d29a3ff0d4758da886edabb458726b210\"\u003eba854b2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePublish the API reference on each release (\u003ca href=\"https://github.com/googleapis/python-genai/commit/1d12358a1398b9a510ae8ba25dd31e746d8e9be9\"\u003e1d12358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTransition docs workflow to GitHub Actions (\u003ca href=\"https://github.com/googleapis/python-genai/commit/3b1256ac5f4b8c49a469ca307ca765185184774d\"\u003e3b1256a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.30.1...v2.31.0\"\u003e2.31.0\u003c/a\u003e (2026-10-14)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003einteractions:\u003c/strong\u003e Add gemini-4-argon to Model enum (\u003ca href=\"https://github.com/googleapis/python-genai/commit/8554b07d0025e19361b7a10a6384cc143f3a8ea9\"\u003e8554b07\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eClear continuation state and preserve prompt feedback when continuation hop returns no candidates (\u003ca href=\"https://github.com/googleapis/python-genai/commit/a0d809cd838ec02938c1646c47cc3ece2761fc09\"\u003ea0d809c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix the function declaration parser for union types. Fixes \u003ca href=\"https://redirect.github.com/googleapis/python-genai/issues/3060\"\u003e#3060\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/python-genai/commit/be32e9e074e6a403621a6d52ae97f81f0777549e\"\u003ebe32e9e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix the grounding metadata merging for automatic continuation in generate content and generate content stream (\u003ca href=\"https://github.com/googleapis/python-genai/commit/f1499bb86c707d51b5b2684ff9423653cc74895c\"\u003ef1499bb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake continuation streams retry dropped hops, stop on prompt_feedback, and keep real errors in generate_content (\u003ca href=\"https://github.com/googleapis/python-genai/commit/339a92921ac877d07d34a3646cddefdf9c71565c\"\u003e339a929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch the mTLS endpoint to each transport's SSL context, including plain aiohttp (\u003ca href=\"https://github.com/googleapis/python-genai/commit/f8a469322cf66716ca3345c14516c0daa213ca1c\"\u003ef8a4693\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.30.0...v2.30.1\"\u003e2.30.1\u003c/a\u003e (2026-10-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eConcatenate output_text across multi-step model responses in a turn (\u003ca href=\"https://github.com/googleapis/python-genai/commit/180c3453f91e4734b828534950fa7f8526934b59\"\u003e180c345\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.29.0...v2.30.0\"\u003e2.30.0\u003c/a\u003e (2026-10-13)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/380733fc4ee376838d9121a5b2603230cd02298e\"\u003e\u003ccode\u003e380733f\u003c/code\u003e\u003c/a\u003e chore(main): release 2.32.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-genai/issues/3142\"\u003e#3142\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/a7bbff6e73fa9444802cd9a17e8c94e30341bf5d\"\u003e\u003ccode\u003ea7bbff6\u003c/code\u003e\u003c/a\u003e fix: Base64-encode inline bytes in Live send_tool_response\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/5c008e14b9c9fdecbaf61eb53ad7c09f57fa5f8a\"\u003e\u003ccode\u003e5c008e1\u003c/code\u003e\u003c/a\u003e feat: Add generation_output_config to GenerateContentConfig\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/4c1abccf258c9247218e66610790043893cd6950\"\u003e\u003ccode\u003e4c1abcc\u003c/code\u003e\u003c/a\u003e fix: Don't crash parsing responses with JSON objects in \u003ccode\u003eAny\u003c/code\u003e-typed fields\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/6cd176e135a188bbb0d0f9afca520e7d6483823d\"\u003e\u003ccode\u003e6cd176e\u003c/code\u003e\u003c/a\u003e feat: update discovery doc\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/ddd7d821497afe97a392e599ccffd5dd5011e44c\"\u003e\u003ccode\u003eddd7d82\u003c/code\u003e\u003c/a\u003e test: switch shared generate_images test to imagen-4.0-fast-generate-001\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/1d12358a1398b9a510ae8ba25dd31e746d8e9be9\"\u003e\u003ccode\u003e1d12358\u003c/code\u003e\u003c/a\u003e docs: publish the API reference on each release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/364889aafe40bfa8f3b9db847ba272d299f7d632\"\u003e\u003ccode\u003e364889a\u003c/code\u003e\u003c/a\u003e feat: Add Live API in-session context updates (\u003ccode\u003esend_context_update\u003c/code\u003e) and typ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/ba854b2d29a3ff0d4758da886edabb458726b210\"\u003e\u003ccode\u003eba854b2\u003c/code\u003e\u003c/a\u003e fix(interactions): sync InteractionSseEventInteractionStatus enum with Intera...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/3b1256ac5f4b8c49a469ca307ca765185184774d\"\u003e\u003ccode\u003e3b1256a\u003c/code\u003e\u003c/a\u003e docs: transition docs workflow to GitHub Actions\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.27.0...v2.32.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.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...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-settings` from 2.15.0 to 2.16.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.16.1\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThis patch release fixes two CLI regressions introduced in 2.16.0.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed-length tuple positionals such as \u003ccode\u003eCliPositionalArg[tuple[int, int]]\u003c/code\u003e and \u003ccode\u003eNamedTuple\u003c/code\u003es are single-valued again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1069\"\u003e#1069\u003c/a\u003e). Since 2.16.0 they were treated as variadic, so a CLI either refused to start with a \u003ccode\u003eSettingsError\u003c/code\u003e or put the wrong argument into the tuple. Variable-length tuples (\u003ccode\u003etuple[int, ...]\u003c/code\u003e and bare \u003ccode\u003eTuple\u003c/code\u003e) are still variadic.\u003c/li\u003e\n\u003cli\u003eA field typed as an alias of a list of dicts, e.g. \u003ccode\u003etype ListOfDict = list[dict[str, int]]\u003c/code\u003e, accepts a JSON list again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1049\"\u003e#1049\u003c/a\u003e). Since 2.16.0, \u003ccode\u003e--xx '[{\u0026quot;a\u0026quot;:1},{\u0026quot;b\u0026quot;:2}]'\u003c/code\u003e was merged into the single dict \u003ccode\u003e{\u0026quot;a\u0026quot;: 1, \u0026quot;b\u0026quot;: 2}\u003c/code\u003e and failed validation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden CI by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1044\"\u003epydantic/pydantic-settings#1044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep list of dicts CLI values as lists 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/1049\"\u003epydantic/pydantic-settings#1049\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep fixed-length tuple CLI positionals single-valued 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/1069\"\u003epydantic/pydantic-settings#1069\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.16.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/1087\"\u003epydantic/pydantic-settings#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1056\"\u003epydantic/pydantic-settings#1056\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.16.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBreaking changes and behavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.10 is no longer supported\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1003\"\u003e#1003\u003c/a\u003e). pydantic-settings now requires Python 3.11+, since 3.10 reaches end of life this month. The \u003ccode\u003etomli\u003c/code\u003e fallback is gone in favor of stdlib \u003ccode\u003etomllib\u003c/code\u003e; the \u003ccode\u003etoml\u003c/code\u003e extra is kept as an empty extra so \u003ccode\u003epip install pydantic-settings[toml]\u003c/code\u003e keeps working.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003epython-dotenv\u0026gt;=1.2.2\u003c/code\u003e is now required\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/971\"\u003e#971\u003c/a\u003e) to pick up the fix for CVE-2026-28684.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAliases are ignored in every source when \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1033\"\u003e#1033\u003c/a\u003e). Env vars, secrets, CLI flags and defaults now use only field names, matching pydantic. An env var named after the alias is now ignored instead of raising \u003ccode\u003eextra_forbidden\u003c/code\u003e, and the CLI exposes \u003ccode\u003e--apple\u003c/code\u003e rather than \u003ccode\u003e--pomo\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003evalidation_alias\u003c/code\u003e takes precedence over \u003ccode\u003ealias\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1038\"\u003e#1038\u003c/a\u003e). When the two differ, values from JSON/YAML/TOML files and the CLI were silently ignored; they now load. CLI help lists the \u003ccode\u003evalidation_alias\u003c/code\u003e flag first, and \u003ccode\u003eCliApp.serialize\u003c/code\u003e emits it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCLI case-insensitivity only lowercases registered options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1036\"\u003e#1036\u003c/a\u003e). With \u003ccode\u003ecase_sensitive=False\u003c/code\u003e, args after \u003ccode\u003e--\u003c/code\u003e and those captured by \u003ccode\u003eCliUnknownArgs\u003c/code\u003e keep their case (\u003ccode\u003e-Xmx4G\u003c/code\u003e no longer becomes \u003ccode\u003e-xmx4g\u003c/code\u003e). Unrecognized options are now reported as typed (\u003ccode\u003e--NOPE\u003c/code\u003e instead of \u003ccode\u003e--nope\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eJSON and YAML config files are read as UTF-8 by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/955\"\u003e#955\u003c/a\u003e) instead of the locale encoding, completing the secrets-file fix from 2.15.0. \u003ccode\u003ejson_file_encoding\u003c/code\u003e/\u003ccode\u003eyaml_file_encoding\u003c/code\u003e still override it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDiscriminated union defaults are partially updated again\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/997\"\u003e#997\u003c/a\u003e). This reverts the 2.15.0 regression with \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e: the default is only dropped when the incoming value selects a \u003cem\u003edifferent\u003c/em\u003e union member.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.15 and pydantic 2.14 support\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1026\"\u003e#1026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1029\"\u003e#1029\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1022\"\u003e#1022\u003c/a\u003e). pydantic 2.14 broke \u003ccode\u003eCliApp.run\u003c/code\u003e and \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e handling; both are fixed.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCached settings instances\u003c/strong\u003e via \u003ccode\u003eSettings.settings_cached()\u003c/code\u003e and \u003ccode\u003eSettings.settings_clear_cache()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/952\"\u003e#952\u003c/a\u003e). These give you a process-local singleton per settings class without hand-rolling \u003ccode\u003elru_cache\u003c/code\u003e wrappers. Calling the class directly still builds a fresh instance.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAWS Systems Manager Parameter Store source\u003c/strong\u003e — \u003ccode\u003eAWSSystemsManagerSettingsSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/941\"\u003e#941\u003c/a\u003e). It recursively reads every parameter under an \u003ccode\u003essm_path\u003c/code\u003e, with \u003ccode\u003e/\u003c/code\u003e mapping onto nested models. Install it with the new \u003ccode\u003eaws-systems-manager\u003c/code\u003e extra.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenv_file_depth\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/940\"\u003e#940\u003c/a\u003e) lets a relative \u003ccode\u003eenv_file\u003c/code\u003e be found in parent directories, mirroring \u003ccode\u003epyproject_toml_depth\u003c/code\u003e. This is useful when scripts run from a subdirectory of a monorepo. It defaults to \u003ccode\u003e0\u003c/code\u003e, which keeps the current behavior.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eCliVariadicArg\u003c/code\u003e for named variadic options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/949\"\u003e#949\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/958\"\u003e#958\u003c/a\u003e). It accepts \u003ccode\u003e--param a b c\u003c/code\u003e in addition to repeated \u003ccode\u003e--param a --param b\u003c/code\u003e. Required fields need at least one value.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4e286e284fe43f0fb86872b91f708d3dd5356bfc\"\u003e\u003ccode\u003e4e286e2\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1087\"\u003e#1087\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/993b59e1682799d5ad33b721b7158718b6278944\"\u003e\u003ccode\u003e993b59e\u003c/code\u003e\u003c/a\u003e Keep fixed-length tuple CLI positionals single-valued (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1069\"\u003e#1069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f651a7a57a0e3b26147da02f2fda2d05f8c34cce\"\u003e\u003ccode\u003ef651a7a\u003c/code\u003e\u003c/a\u003e Keep list of dicts CLI values as lists (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1049\"\u003e#1049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ecf7d90bf1b1b71f2875f607c1668c44f576bf9c\"\u003e\u003ccode\u003eecf7d90\u003c/code\u003e\u003c/a\u003e Harden CI (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1044\"\u003e#1044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8c259f41b49b4cefbe4fb676d3c1f52dddd3cca8\"\u003e\u003ccode\u003e8c259f4\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1043\"\u003e#1043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4bc667ada383aca4df00304cd171f327a9fae163\"\u003e\u003ccode\u003e4bc667a\u003c/code\u003e\u003c/a\u003e Keep case of non-option CLI args when case_sensitive=False (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f75a8057a5fafe4aef3a042c2adf367c6987f73f\"\u003e\u003ccode\u003ef75a805\u003c/code\u003e\u003c/a\u003e Simplify alias resolution branch and test alias with AliasChoices/AliasPath (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/cfdc5585e821e84905905027de68a0188213537a\"\u003e\u003ccode\u003ecfdc558\u003c/code\u003e\u003c/a\u003e Honor env_parse_none_str for GCP Secret Manager (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1040\"\u003e#1040\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/081d39f9c73f46e68bc2bef75a23f7d84ed0c377\"\u003e\u003ccode\u003e081d39f\u003c/code\u003e\u003c/a\u003e Fix config file and CLI values being ignored when alias differs from validati...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c46ebc4cc599c09f3692f4d2e82a8f0bb5433f3a\"\u003e\u003ccode\u003ec46ebc4\u003c/code\u003e\u003c/a\u003e Expand home paths when checking TOML table headers (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.15.0...v2.16.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain` from 1.4.3 to 1.4.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain/releases\"\u003elangchain's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain==1.4.7\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.4.6\u003c/p\u003e\n\u003cp\u003echore(langchain): update lockfile (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41402\"\u003e#41402\u003c/a\u003e)\nrelease(langchain): 1.4.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41401\"\u003e#41401\u003c/a\u003e)\nchore(deps): bump certifi from 2025.11.12 to 2026.10.19 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41370\"\u003e#41370\u003c/a\u003e)\nfeat(core,langchain,standard-tests): read \u003ccode\u003etool-call-delta\u003c/code\u003e in stream consumers (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41246\"\u003e#41246\u003c/a\u003e)\nchore(deps): bump aiohttp from 3.14.4 to 3.14.5 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41360\"\u003e#41360\u003c/a\u003e)\nchore(deps): bump aiohttp from 3.14.3 to 3.14.4 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41330\"\u003e#41330\u003c/a\u003e)\nchore(deps): bump mcp from 2.1.1 to 2.2.0 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41270\"\u003e#41270\u003c/a\u003e)\nfeat(core): accept address inside LangChainTracer (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41006\"\u003e#41006\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain==1.4.6\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.4.5\u003c/p\u003e\n\u003cp\u003erelease(langchain): 1.4.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41247\"\u003e#41247\u003c/a\u003e)\nfeat(langchain): add opt-in per-call interrupts to HITL middleware (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41062\"\u003e#41062\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain==1.4.5\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.4.4\u003c/p\u003e\n\u003cp\u003erelease(langchain): 1.4.5 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41226\"\u003e#41226\u003c/a\u003e)\nfeat(langchain): accept \u003ccode\u003esummarizer\u003c/code\u003e in \u003ccode\u003eSummarizationMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41225\"\u003e#41225\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-fireworks==1.4.4\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-fireworks==1.4.3\u003c/p\u003e\n\u003cp\u003erelease(fireworks): 1.4.4 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38753\"\u003e#38753\u003c/a\u003e)\nfix(fireworks): report cached prompt token usage (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38751\"\u003e#38751\u003c/a\u003e)\nchore(deps): refresh lockfiles (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38746\"\u003e#38746\u003c/a\u003e)\nchore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38663\"\u003e#38663\u003c/a\u003e)\nchore: bump pytest from 9.1.0 to 9.1.1 in /libs/partners/fireworks (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38594\"\u003e#38594\u003c/a\u003e)\nchore: bump langsmith from 0.8.18 to 0.9.5 in /libs/partners/fireworks (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38595\"\u003e#38595\u003c/a\u003e)\ndocs(fireworks): clarify prompt-cache session affinity guidance (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38522\"\u003e#38522\u003c/a\u003e)\ntest(fireworks): cover request-level extra headers (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38518\"\u003e#38518\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain==1.4.4\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.4.3\u003c/p\u003e\n\u003cp\u003erelease(langchain): 1.4.4 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41163\"\u003e#41163\u003c/a\u003e)\nfix(langchain): (SummarizationMiddleware) retry summary step on context overflow (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41159\"\u003e#41159\u003c/a\u003e)\nchore(deps): bump fsspec from 2026.6.0 to 2026.9.0 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41097\"\u003e#41097\u003c/a\u003e)\nchore(deps): bump multidict from 6.7.0 to 6.9.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41075\"\u003e#41075\u003c/a\u003e)\nchore(deps): bump langgraph-sdk from 0.4.2 to 0.4.4 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41074\"\u003e#41074\u003c/a\u003e)\nchore(deps): bump fsspec from 2025.10.0 to 2026.6.0 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41071\"\u003e#41071\u003c/a\u003e)\nchore(langchain): bump minimum FastMCP to 4.0.11 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41054\"\u003e#41054\u003c/a\u003e)\nchore(deps): bump pyjwt from 2.13.0 to 2.15.0 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/40939\"\u003e#40939\u003c/a\u003e)\nchore(deps): bump urllib3 from 2.7.0 to 2.8.0 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/40943\"\u003e#40943\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/fbb8a35da7023ac0382c3b22f047337861bd3486\"\u003e\u003ccode\u003efbb8a35\u003c/code\u003e\u003c/a\u003e chore(langchain): update lockfile (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41402\"\u003e#41402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/ad92e36511c8e7836fd990c4497bfb0a024bf9d8\"\u003e\u003ccode\u003ead92e36\u003c/code\u003e\u003c/a\u003e release(langchain): 1.4.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41401\"\u003e#41401\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/bdf0f53ed0aec3c9ae371a549e1a4d2ee4e9f021\"\u003e\u003ccode\u003ebdf0f53\u003c/code\u003e\u003c/a\u003e release(core): 1.6.13 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41397\"\u003e#41397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/59be9ee06809103d4bd8db8554ab75d45e664733\"\u003e\u003ccode\u003e59be9ee\u003c/code\u003e\u003c/a\u003e chore(text-splitters): bump certifi to 2026.10.19 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41393\"\u003e#41393\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/82ef9338480c1d88eebe699ac2755e898b42c3d7\"\u003e\u003ccode\u003e82ef933\u003c/code\u003e\u003c/a\u003e release(perplexity): 1.4.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41392\"\u003e#41392\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/fc23e66e6622989aebb4ccd6f4cefa2198368168\"\u003e\u003ccode\u003efc23e66\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41354\"\u003e#41354\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/331e6bee6343b1c6e2f9c728a27973fd42894304\"\u003e\u003ccode\u003e331e6be\u003c/code\u003e\u003c/a\u003e chore(deps): bump certifi from 2025.11.12 to 2026.10.19 in /libs/partners/ant...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/144b0b4e12001152c3b11107434f11d39f218a04\"\u003e\u003ccode\u003e144b0b4\u003c/code\u003e\u003c/a\u003e chore(deps): bump certifi from 2025.8.3 to 2026.10.19 in /libs/partners/chrom...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/9b5ae668eec17b2ba122c5b5aeb94e1078ad3757\"\u003e\u003ccode\u003e9b5ae66\u003c/code\u003e\u003c/a\u003e chore(deps): bump certifi from 2025.8.3 to 2026.10.19 in /libs/partners/deeps...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/c773a1b5e5b50194300f6d7b5ff3cba7f332df0d\"\u003e\u003ccode\u003ec773a1b\u003c/code\u003e\u003c/a\u003e chore(deps): bump certifi from 2025.8.3 to 2026.10.19 in /libs/partners/exa (...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain==1.4.3...langchain==1.4.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-openai` from 1.6.7 to 1.7.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain/releases\"\u003elangchain-openai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-openai==1.7.2\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-openai==1.7.1\u003c/p\u003e\n\u003cp\u003erelease(openai): 1.7.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41245\"\u003e#41245\u003c/a\u003e)\nfix(openai): keep Responses stream items on one block when output_index drifts (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41121\"\u003e#41121\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-openai==1.7.1\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-openai==1.7.0\u003c/p\u003e\n\u003cp\u003erelease(openai): 1.7.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41222\"\u003e#41222\u003c/a\u003e)\nfeat(core,anthropic,openai): declare mid-conversation support in model profiles (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41180\"\u003e#41180\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-openai==1.7.0\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-openai==1.6.7\u003c/p\u003e\n\u003cp\u003erelease(openai): 1.7.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41154\"\u003e#41154\u003c/a\u003e)\nfeat(openai): support decisions api (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41125\"\u003e#41125\u003c/a\u003e)\nchore(deps): bump langgraph-sdk from 0.4.4 to 0.4.6 in /libs/partners/openai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41096\"\u003e#41096\u003c/a\u003e)\nchore(deps): bump langgraph-sdk from 0.4.2 to 0.4.4 in /libs/partners/openai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41072\"\u003e#41072\u003c/a\u003e)\nchore(deps): bump pyjwt from 2.15.0 to 2.15.1 in /libs/partners/openai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/40951\"\u003e#40951\u003c/a\u003e)\nchore(deps): bump urllib3 from 2.7.0 to 2.8.0 in /libs/partners/openai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/40952\"\u003e#40952\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/170060e8387e06cd67b2458db0f232b2fa53fefd\"\u003e\u003ccode\u003e170060e\u003c/code\u003e\u003c/a\u003e release(openai): 1.7.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41245\"\u003e#41245\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/4bbbc5a3b0ad47ff2d73bfdce4d4ab86ca5724f9\"\u003e\u003ccode\u003e4bbbc5a\u003c/code\u003e\u003c/a\u003e fix(openai): keep Responses stream items on one block when output_index drift...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/8ace87e7a6493d41d4c61bb41a637052367b27f3\"\u003e\u003ccode\u003e8ace87e\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41229\"\u003e#41229\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/f2bf626ccee0a0e88d560706d4fdad35e43116e5\"\u003e\u003ccode\u003ef2bf626\u003c/code\u003e\u003c/a\u003e release(langchain): 1.4.5 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41226\"\u003e#41226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/a0074fb7e5f3fe7c192fcec442582bf5babbf642\"\u003e\u003ccode\u003ea0074fb\u003c/code\u003e\u003c/a\u003e feat(langchain): accept \u003ccode\u003esummarizer\u003c/code\u003e in \u003ccode\u003eSummarizationMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41225\"\u003e#41225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/36fb6aa0a445e770521b63ff5aa97f8fd6aeb1be\"\u003e\u003ccode\u003e36fb6aa\u003c/code\u003e\u003c/a\u003e release(anthropic): 1.7.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41221\"\u003e#41221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/ba2baca02ea4b3add7ba08aeabf3673dc18199c6\"\u003e\u003ccode\u003eba2baca\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41215\"\u003e#41215\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/85e0b7da58c32922d8f991962739e9789eb1f649\"\u003e\u003ccode\u003e85e0b7d\u003c/code\u003e\u003c/a\u003e release(openai): 1.7.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41222\"\u003e#41222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/fddca066031a2122b3562485bd9c961a46978a1e\"\u003e\u003ccode\u003efddca06\u003c/code\u003e\u003c/a\u003e release(core): 1.6.10 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41220\"\u003e#41220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/e4b143729ffb3c6307376909d3aa9921b360c1f5\"\u003e\u003ccode\u003ee4b1437\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41145\"\u003e#41145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain-openai==1.6.7...langchain-openai==1.7.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-google-genai` from 4.4.0 to 4.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain-google/releases\"\u003elangchain-google-genai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-google-genai==4.4.2\u003c/h2\u003e\n\u003cp\u003eChanges since libs/genai/v4.4.1\u003c/p\u003e\n\u003cp\u003erelease(genai): 4.2.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2058\"\u003e#2058\u003c/a\u003e)\nfix(genai,vertexai): normalize model names and fix Gemini 3.5 cached content paths and streaming usage (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2044\"\u003e#2044\u003c/a\u003e)\nchore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1984\"\u003e#1984\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-google-genai==4.4.1\u003c/h2\u003e\n\u003cp\u003eChanges since libs/genai/v4.4.0\u003c/p\u003e\n\u003cp\u003erelease(genai): 4.4.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2050\"\u003e#2050\u003c/a\u003e)\nfix(genai): omit Bedrock cache points from Gemini prompts (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2049\"\u003e#2049\u003c/a\u003e)\nfix(genai): treat Gemini 4+ models as Gemini 3 or later (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2047\"\u003e#2047\u003c/a\u003e)\nchore: bump urllib3 from 2.7.0 to 2.8.0 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2032\"\u003e#2032\u003c/a\u003e)\nchore: bump the minor-and-patch group in /libs/genai with 4 updates (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2034\"\u003e#2034\u003c/a\u003e)\nchore: bump types-requests from 2.33.0.20260712 to 2.33.0.20260906 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2035\"\u003e#2035\u003c/a\u003e)\nchore: bump types-protobuf from 7.35.1.20260827 to 7.35.1.20260906 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2036\"\u003e#2036\u003c/a\u003e)\nchore: bump types-google-cloud-ndb from 2.4.0.20260724 to 2.4.0.20260909 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2037\"\u003e#2037\u003c/a\u003e)\nchore: bump anyio from 4.12.1 to 4.14.2 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2020\"\u003e#2020\u003c/a\u003e)\nchore: bump the minor-and-patch group across 1 directory with 2 updates (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1990\"\u003e#1990\u003c/a\u003e)\nchore: bump types-protobuf from 7.35.1.20260824 to 7.35.1.20260827 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1986\"\u003e#1986\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/69361c5365fc6c78d5948e3468bc7f415166219a\"\u003e\u003ccode\u003e69361c5\u003c/code\u003e\u003c/a\u003e release(genai): 4.2.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2058\"\u003e#2058\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/ee823bf2f7f12c52f1dcb65e15dcdfc7c5b89a85\"\u003e\u003ccode\u003eee823bf\u003c/code\u003e\u003c/a\u003e fix(genai,vertexai): normalize model names and fix Gemini 3.5 cached content ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/f24b735bc330a36875990bc143bbe1cae097ca68\"\u003e\u003ccode\u003ef24b735\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1984\"\u003e#1984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/63eba6800b5aa7761209c60fef8f17d030b8f34c\"\u003e\u003ccode\u003e63eba68\u003c/code\u003e\u003c/a\u003e chore: bump langgraph-sdk from 0.4.2 to 0.4.4 in /libs/community (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2052\"\u003e#2052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/3d3b22f43b8e201bcb015c1e5bb6218ec6d34216\"\u003e\u003ccode\u003e3d3b22f\u003c/code\u003e\u003c/a\u003e chore: bump langgraph-sdk from 0.4.2 to 0.4.4 in /libs/vertexai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2054\"\u003e#2054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/4e206c22bbfe5f44cc43ca99b128e91592c0f60f\"\u003e\u003ccode\u003e4e206c2\u003c/code\u003e\u003c/a\u003e chore: bump fsspec from 2025.12.0 to 2026.6.0 in /libs/vertexai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2051\"\u003e#2051\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/3df872becedbe39d92b77f0cad693ec6d13d5580\"\u003e\u003ccode\u003e3df872b\u003c/code\u003e\u003c/a\u003e release(genai): 4.4.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2050\"\u003e#2050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/933f69be0f2ef505ee352982ad06230d4af99fd2\"\u003e\u003ccode\u003e933f69b\u003c/code\u003e\u003c/a\u003e fix(genai): omit Bedrock cache points from Gemini prompts (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2049\"\u003e#2049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/24ed39867e4a42b305e7e89d42514a6e23e71142\"\u003e\u003ccode\u003e24ed398\u003c/code\u003e\u003c/a\u003e fix(genai): treat Gemini 4+ models as Gemini 3 or later (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2047\"\u003e#2047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/bd712d49ef6534a6170aebe1fcb97c9b695b144a\"\u003e\u003ccode\u003ebd712d4\u003c/code\u003e\u003c/a\u003e release(community): 5.1.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2046\"\u003e#2046\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain-google/compare/libs/genai/v4.4.0...libs/genai/v4.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-anthropic` from 1.7.5 to 1.7.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain/releases\"\u003elangchain-anthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-anthropic==1.7.6\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-anthropic==1.7.5\u003c/p\u003e\n\u003cp\u003erelease(anthropic): 1.7.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41221\"\u003e#41221\u003c/a\u003e)\nchore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41145\"\u003e#41145\u003c/a\u003e)\nfeat(core,anthropic,openai): declare mid-conversation support in model profiles (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41180\"\u003e#41180\u003c/a\u003e)\nchore(deps): bump langgraph-sdk from 0.4.4 to 0.4.6 in /libs/partners/anthropic (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41101\"\u003e#41101\u003c/a\u003e)\nchore(deps): bump langgraph-sdk from 0.4.2 to 0.4.4 in /libs/partners/anthropic (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41080\"\u003e#41080\u003c/a\u003e)\nchore(deps): bump urllib3 from 2.7.0 to 2.8.0 in /libs/partners/anthropic (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/40964\"\u003e#40964\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/36fb6aa0a445e770521b63ff5aa97f8fd6aeb1be\"\u003e\u003ccode\u003e36fb6aa\u003c/code\u003e\u003c/a\u003e release(anthropic): 1.7.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41221\"\u003e#41221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/ba2baca02ea4b3add7ba08aeabf3673dc18199c6\"\u003e\u003ccode\u003eba2baca\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41215\"\u003e#41215\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/85e0b7da58c32922d8f991962739e9789eb1f649\"\u003e\u003ccode\u003e85e0b7d\u003c/code\u003e\u003c/a\u003e release(openai): 1.7.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41222\"\u003e#41222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/fddca066031a2122b3562485bd9c961a46978a1e\"\u003e\u003ccode\u003efddca06\u003c/code\u003e\u003c/a\u003e release(core): 1.6.10 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41220\"\u003e#41220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/e4b143729ffb3c6307376909d3aa9921b360c1f5\"\u003e\u003ccode\u003ee4b1437\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41145\"\u003e#41145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/b060a7466482ed5dac5fa1ef12e3ad21cccce385\"\u003e\u003ccode\u003eb060a74\u003c/code\u003e\u003c/a\u003e feat(core,anthropic,openai): declare mid-conversation support in model profil...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/34489d61433cbf5044a630de2e7797e361672900\"\u003e\u003ccode\u003e34489d6\u003c/code\u003e\u003c/a\u003e release(langchain): 1.4.4 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41163\"\u003e#41163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/e7ca68b92062312221d7768a9d731a2d4942416b\"\u003e\u003ccode\u003ee7ca68b\u003c/code\u003e\u003c/a\u003e fix(langchain): (SummarizationMiddleware) retry summary step on context overf...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/fc7dc7757a46ebb444be1ead0efdeab5ca7ad8ce\"\u003e\u003ccode\u003efc7dc77\u003c/code\u003e\u003c/a\u003e release(core): 1.6.9 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41160\"\u003e#41160\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/a055e836fd4ff75bfc2fe4adda33d06f0d625a63\"\u003e\u003ccode\u003ea055e83\u003c/code\u003e\u003c/a\u003e feat(core): accept a callable in with_retry (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41158\"\u003e#41158\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain-anthropic==1.7.5...langchain-anthropic==1.7.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.43.107 to 1.43.118\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/185b1bd1bb677650bd986d581d19c0ed3596e583\"\u003e\u003ccode\u003e185b1bd\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.118'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/732c473d141c94365d0ba679f1b376b17ca7f429\"\u003e\u003ccode\u003e732c473\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.118\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b087cd3965d0c876c498ebd755d7663562dc39c8\"\u003e\u003ccode\u003eb087cd3\u003c/code\u003e\u003c/a\u003e Add cha...\n\n_Description has been truncated_","html_url":"https://github.com/5hirish/duct/pull/411","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/5hirish%2Fduct/issues/411","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/411/packages"},{"uuid":"6027004474","node_id":"PR_kwDOTn9DnM8AAAABKm3SVQ","number":133,"state":"open","title":"build(deps): bump the python-runtime group across 1 directory with 9 updates","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-10-25T17:05:10.000Z","updated_at":"2026-10-25T17:05:17.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python-runtime","update_count":9,"packages":[{"name":"fastapi","old_version":"0.140.13","new_version":"0.160.0","repository_url":"https://github.com/fastapi/fastapi"},{"name":"jsonschema","old_version":"4.23.0","new_version":"4.26.0","repository_url":"https://github.com/python-jsonschema/jsonschema"},{"name":"pydantic","old_version":"2.13.4","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [fastapi](https://github.com/fastapi/fastapi), [jsonschema](https://github.com/python-jsonschema/jsonschema), [pillow](https://github.com/python-pillow/Pillow), [pydantic](https://github.com/pydantic/pydantic), [pypdfium2](https://github.com/pypdfium2-team/pypdfium2), [pyyaml](https://github.com/yaml/pyyaml), [redis](https://github.com/redis/redis-py), [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) and [structlog](https://github.com/hynek/structlog) to permit the latest version.\nUpdates `fastapi` from 0.140.13 to 0.160.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.160.0\u003c/h2\u003e\n\u003cp\u003eQuery, header, cookie, and form parameter models now apply their \u003ccode\u003eextra\u003c/code\u003e configuration to all submitted fields in the same parameter location, consistent with Pydantic behavior. This includes fields declared in other models, individual parameters, or dependencies, which were previously excluded.\u003c/p\u003e\n\u003cp\u003eWith \u003ccode\u003eextra=\u0026quot;forbid\u0026quot;\u003c/code\u003e, fields outside the model are rejected even if another parameter declares them. With \u003ccode\u003eextra=\u0026quot;allow\u0026quot;\u003c/code\u003e, those fields are included as model extras. With the default \u003ccode\u003eextra=\u0026quot;ignore\u0026quot;\u003c/code\u003e, they are ignored.\u003c/p\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16594\"\u003e#16594\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump certifi from 2026.1.4 to 2026.10.19. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16571\"\u003e#16571\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.159.1\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16586\"\u003e#16586\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.159.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16584\"\u003e#16584\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.158.2\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16582\"\u003e#16582\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.158.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Preserve form media types in OpenAPI. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16579\"\u003e#16579\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.158.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16577\"\u003e#16577\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.157.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16573\"\u003e#16573\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📝 Clarify boolean query parameter parsing. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16569\"\u003e#16569\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Clarify nullable query parameters and path parameter defaults. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16568\"\u003e#16568\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/addd0778e996cf886972b8024113d79f8d0a3580\"\u003e\u003ccode\u003eaddd077\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.160.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16595\"\u003e#16595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/352a4edff3f4362f28c42da29e0879846f6f637e\"\u003e\u003ccode\u003e352a4ed\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/91a335ce946c7a832da973f2acf69b8876594216\"\u003e\u003ccode\u003e91a335c\u003c/code\u003e\u003c/a\u003e 🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16594\"\u003e#16594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ce6ee83e5411b98582e996e47edf7870418a68f4\"\u003e\u003ccode\u003ece6ee83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/97858ed7df0d27d5cc3e6c648bd6f0f9cdf25b1f\"\u003e\u003ccode\u003e97858ed\u003c/code\u003e\u003c/a\u003e ⬆ Bump certifi from 2026.1.4 to 2026.10.19 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16571\"\u003e#16571\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4bdfbe4513084b19e22421ce1f916d8c1ac462a0\"\u003e\u003ccode\u003e4bdfbe4\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.159.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16588\"\u003e#16588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b169d23e7d65c99ce83e1cf5c6e76f3f585c6017\"\u003e\u003ccode\u003eb169d23\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/86274cc0acc9fc6d608e251c874105c94634bddf\"\u003e\u003ccode\u003e86274cc\u003c/code\u003e\u003c/a\u003e ✨ Add support for optional unions of form models (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16586\"\u003e#16586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/68cc4cbb2e0600841b0d6bdd1cc29038b54a00e6\"\u003e\u003ccode\u003e68cc4cb\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.159.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16585\"\u003e#16585\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/fea4dedffddcf5641514334b78f69a9d93b1eb04\"\u003e\u003ccode\u003efea4ded\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.140.13...0.160.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jsonschema` from 4.23.0 to 4.26.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-jsonschema/jsonschema/releases\"\u003ejsonschema's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.26.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\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-jsonschema/jsonschema/pull/1400\"\u003epython-jsonschema/jsonschema#1400\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-jsonschema/jsonschema/pull/1405\"\u003epython-jsonschema/jsonschema#1405\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 6.5.0 to 6.6.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-jsonschema/jsonschema/pull/1406\"\u003epython-jsonschema/jsonschema#1406\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-jsonschema/jsonschema/pull/1407\"\u003epython-jsonschema/jsonschema#1407\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-jsonschema/jsonschema/pull/1413\"\u003epython-jsonschema/jsonschema#1413\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 6.6.0 to 6.6.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-jsonschema/jsonschema/pull/1412\"\u003epython-jsonschema/jsonschema#1412\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/gh-action-pypi-publish from 1.12.4 to 1.13.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-jsonschema/jsonschema/pull/1410\"\u003epython-jsonschema/jsonschema#1410\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump softprops/action-gh-release from 2.3.2 to 2.3.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/python-jsonschema/jsonschema/pull/1409\"\u003epython-jsonschema/jsonschema#1409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python from 5 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1411\"\u003epython-jsonschema/jsonschema#1411\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003evalidators: avoid \u003ccode\u003eurllib.request\u003c/code\u003e at import-time by \u003ca href=\"https://github.com/gudnimg\"\u003e\u003ccode\u003e@​gudnimg\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1416\"\u003epython-jsonschema/jsonschema#1416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 6.6.1 to 6.8.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-jsonschema/jsonschema/pull/1417\"\u003epython-jsonschema/jsonschema#1417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump softprops/action-gh-release from 2.3.3 to 2.3.4 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1418\"\u003epython-jsonschema/jsonschema#1418\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-jsonschema/jsonschema/pull/1415\"\u003epython-jsonschema/jsonschema#1415\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump softprops/action-gh-release from 2.3.4 to 2.4.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-jsonschema/jsonschema/pull/1419\"\u003epython-jsonschema/jsonschema#1419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump github/codeql-action from 3 to 4 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1420\"\u003epython-jsonschema/jsonschema#1420\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 6.8.0 to 7.1.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-jsonschema/jsonschema/pull/1421\"\u003epython-jsonschema/jsonschema#1421\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-jsonschema/jsonschema/pull/1424\"\u003epython-jsonschema/jsonschema#1424\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 7.1.0 to 7.1.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-jsonschema/jsonschema/pull/1423\"\u003epython-jsonschema/jsonschema#1423\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-jsonschema/jsonschema/pull/1425\"\u003epython-jsonschema/jsonschema#1425\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-jsonschema/jsonschema/pull/1429\"\u003epython-jsonschema/jsonschema#1429\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-jsonschema/jsonschema/pull/1431\"\u003epython-jsonschema/jsonschema#1431\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump softprops/action-gh-release from 2.4.1 to 2.4.2 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1432\"\u003epython-jsonschema/jsonschema#1432\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 7.1.1 to 7.1.2 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1430\"\u003epython-jsonschema/jsonschema#1430\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-jsonschema/jsonschema/pull/1434\"\u003epython-jsonschema/jsonschema#1434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 7.1.2 to 7.1.4 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1435\"\u003epython-jsonschema/jsonschema#1435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1436\"\u003epython-jsonschema/jsonschema#1436\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-jsonschema/jsonschema/pull/1437\"\u003epython-jsonschema/jsonschema#1437\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump softprops/action-gh-release from 2.4.2 to 2.5.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-jsonschema/jsonschema/pull/1438\"\u003epython-jsonschema/jsonschema#1438\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-jsonschema/jsonschema/pull/1439\"\u003epython-jsonschema/jsonschema#1439\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocument \u003ccode\u003euuid\u003c/code\u003e format by \u003ca href=\"https://github.com/sim642\"\u003e\u003ccode\u003e@​sim642\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1440\"\u003epython-jsonschema/jsonschema#1440\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-jsonschema/jsonschema/pull/1441\"\u003epython-jsonschema/jsonschema#1441\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 7.1.4 to 7.1.6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1442\"\u003epython-jsonschema/jsonschema#1442\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-jsonschema/jsonschema/pull/1443\"\u003epython-jsonschema/jsonschema#1443\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/gudnimg\"\u003e\u003ccode\u003e@​gudnimg\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1416\"\u003epython-jsonschema/jsonschema#1416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sim642\"\u003e\u003ccode\u003e@​sim642\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1440\"\u003epython-jsonschema/jsonschema#1440\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-jsonschema/jsonschema/compare/v4.25.1...v4.26.0\"\u003ehttps://github.com/python-jsonschema/jsonschema/compare/v4.25.1...v4.26.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.25.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidator\u003c/code\u003e protocol init to match runtime by \u003ca href=\"https://github.com/sirosen\"\u003e\u003ccode\u003e@​sirosen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1396\"\u003epython-jsonschema/jsonschema#1396\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/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst\"\u003ejsonschema's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev4.26.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eDecrease import time by delaying importing of \u003ccode\u003eurllib.request\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/1416\"\u003e#1416\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev4.25.1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix an incorrect required argument in the \u003ccode\u003eValidator\u003c/code\u003e protocol's type annotations (\u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/1396\"\u003e#1396\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev4.25.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for the \u003ccode\u003eiri\u003c/code\u003e and \u003ccode\u003eiri-reference\u003c/code\u003e formats to the \u003ccode\u003eformat-nongpl\u003c/code\u003e extra via the MIT-licensed \u003ccode\u003erfc3987-syntax\u003c/code\u003e.\nThey were alread supported by the \u003ccode\u003eformat\u003c/code\u003e extra. (\u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/1388\"\u003e#1388\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev4.24.1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eProperly escape segments in \u003ccode\u003eValidationError.json_path\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/139\"\u003e#139\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev4.24.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix improper handling of \u003ccode\u003eunevaluatedProperties\u003c/code\u003e in the presence of \u003ccode\u003eadditionalProperties\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/1351\"\u003e#1351\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.8 has been dropped, as it is end-of-life.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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-jsonschema/jsonschema/commit/a7277432b0f7bcd0551f6e589d30457017125df4\"\u003e\u003ccode\u003ea727743\u003c/code\u003e\u003c/a\u003e Add a changelog entry for 4.26.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/6d28c13efbbd6cf136143fdbb18f79d4476091f6\"\u003e\u003ccode\u003e6d28c13\u003c/code\u003e\u003c/a\u003e Update the lockfile.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/739499edc33c007ff62180c9fef61dbf5480bb7b\"\u003e\u003ccode\u003e739499e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/cb2d77980713577f65cc7e7c7c115932206393fd\"\u003e\u003ccode\u003ecb2d779\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/1443\"\u003e#1443\u003c/a\u003e from python-jsonschema/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/e6bbbb7c5bcdb32a654572d17bfce264aefd1f9d\"\u003e\u003ccode\u003ee6bbbb7\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/d56037a88faac4881214c6674a785b4abd428617\"\u003e\u003ccode\u003ed56037a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/1442\"\u003e#1442\u003c/a\u003e from python-jsonschema/dependabot/github_actions/ast...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/e54ce13fb590a5c17fb702431598a382de6e68f9\"\u003e\u003ccode\u003ee54ce13\u003c/code\u003e\u003c/a\u003e Bump astral-sh/setup-uv from 7.1.4 to 7.1.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/1f7c9fbd01d9c2f8ddd98065324062f7e122dbe1\"\u003e\u003ccode\u003e1f7c9fb\u003c/code\u003e\u003c/a\u003e Partially update docs requirements.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/241aec982bc8c867f276779faf20d49d9774532f\"\u003e\u003ccode\u003e241aec9\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/1441\"\u003e#1441\u003c/a\u003e from python-jsonschema/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/2818efb4fa446ed4fa7815b4e09a7b4b7c633852\"\u003e\u003ccode\u003e2818efb\u003c/code\u003e\u003c/a\u003e Apache-2.0 -\u0026gt; nongpl\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-jsonschema/jsonschema/compare/v4.23.0...v4.26.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` to 13.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e13.0.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/13.0.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/13.0.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove undocumented \u003ccode\u003eGifImagePlugin._save_netpbm\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9901\"\u003e#9901\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove ExifTags.IFD.Makernote \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9850\"\u003e#9850\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.10 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9750\"\u003e#9750\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove deprecations for Pillow 13.0.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9751\"\u003e#9751\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate IM image format \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9849\"\u003e#9849\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDeprecate ImageQt align8to32() in favour of raw encoder stride \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9940\"\u003e#9940\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDeprecate JpegImageFile.load_djpeg \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9924\"\u003e#9924\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate release notes for Pillow 13.0.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10223\"\u003e#10223\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect the ImageOps.fit centering corner documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10118\"\u003e#10118\u003c/a\u003e [\u003ca href=\"https://github.com/FanWu-ai\"\u003e\u003ccode\u003e@​FanWu-ai\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate Tidelift links \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10102\"\u003e#10102\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect bullet point syntax in release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10069\"\u003e#10069\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageDraw signatures in docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10065\"\u003e#10065\u003c/a\u003e [\u003ca href=\"https://github.com/ZainnQureshii\"\u003e\u003ccode\u003e@​ZainnQureshii\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10048\"\u003e#10048\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd pillow-wmf and pillow-zx-spectrum to third-party plugins list \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10037\"\u003e#10037\u003c/a\u003e [\u003ca href=\"https://github.com/bitplane\"\u003e\u003ccode\u003e@​bitplane\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDelete CLAUDE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10027\"\u003e#10027\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd pillow-lunasvg to third-party plugins list \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10016\"\u003e#10016\u003c/a\u003e [\u003ca href=\"https://github.com/Maksim-Burtsev\"\u003e\u003ccode\u003e@​Maksim-Burtsev\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eExtend security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10018\"\u003e#10018\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate Color3DLUT description \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10004\"\u003e#10004\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocument the internal image distinctness constraints \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9752\"\u003e#9752\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10000\"\u003e#10000\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eLink security policy in project metadata \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9980\"\u003e#9980\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImage.new(): correct docstring and comment about uninitialized memory \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9960\"\u003e#9960\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd AGENTS.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9582\"\u003e#9582\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8811\"\u003e#8811\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9937\"\u003e#9937\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9923\"\u003e#9923\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9922\"\u003e#9922\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eC interface is internal \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9879\"\u003e#9879\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect function references \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9895\"\u003e#9895\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevert move from python-pillow.org to python-pillow.github.io \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9830\"\u003e#9830\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd additional CVE numbers to 12.3.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9777\"\u003e#9777\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove remaining :rtype:s from docstrings \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9742\"\u003e#9742\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9759\"\u003e#9759\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4.3.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10175\"\u003e#10175\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10132\"\u003e#10132\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.5.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10108\"\u003e#10108\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10111\"\u003e#10111\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\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-pillow/Pillow/commit/293218ad059d994baf1777d882911bed6a49704a\"\u003e\u003ccode\u003e293218a\u003c/code\u003e\u003c/a\u003e 13.0.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/262e8e48229197ef08792de41a6bdd94e42219a0\"\u003e\u003ccode\u003e262e8e4\u003c/code\u003e\u003c/a\u003e Update release notes for Pillow 13.0.0 (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10223\"\u003e#10223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af56ace297b0991d02988fcc2ea933e4824b4fb3\"\u003e\u003ccode\u003eaf56ace\u003c/code\u003e\u003c/a\u003e Validate TIFF tag values against libtiff's own field definition before TIFFSe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/570df030c0d30c2bf5336b2ab59f3902d8ab0b6d\"\u003e\u003ccode\u003e570df03\u003c/code\u003e\u003c/a\u003e Validate TIFF tag values against libtiff's own field definition before TIFFSe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53318b50e8e9e85a57d033d4d879e1398d97aeb1\"\u003e\u003ccode\u003e53318b5\u003c/code\u003e\u003c/a\u003e Take libtiff scanline geometry tags from the image, not tiffinfo/exif (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10226\"\u003e#10226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/0a87417a4288ed72684e096d14d063ccdd478939\"\u003e\u003ccode\u003e0a87417\u003c/code\u003e\u003c/a\u003e Bound retained TIFF tag data by stream size (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10225\"\u003e#10225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/11582e5ffbdceb973d5ee593f3105af5a9852b40\"\u003e\u003ccode\u003e11582e5\u003c/code\u003e\u003c/a\u003e Fix heap buffer overflow in _tiffWriteProc when saving TIFF to BytesIO (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10224\"\u003e#10224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8501adcb81088f1def8f59ff3f4b6837dd211c5f\"\u003e\u003ccode\u003e8501adc\u003c/code\u003e\u003c/a\u003e Fix test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/ec5f1cbcf67275641abaad5c065ffb64a0a804a9\"\u003e\u003ccode\u003eec5f1cb\u003c/code\u003e\u003c/a\u003e Take libtiff scanline geometry tags from the image, not tiffinfo/exif\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/4b63dffd8a6d980fa0e21b40832fa6cbf033eacf\"\u003e\u003ccode\u003e4b63dff\u003c/code\u003e\u003c/a\u003e Share TIFF tag data budget across frames\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.3.0...13.0.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.4 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pypdfium2` to 5.14.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/releases\"\u003epypdfium2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.14.0\u003c/h2\u003e\n\u003ch2\u003eRelease 5.14.0\u003c/h2\u003e\n\u003ch3\u003eSummary\u003c/h3\u003e\n\u003cp\u003e\u003cem\u003eRuntime\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ePdfDocument.get_identifier()\u003c/code\u003e: Fix a blunder that caused one byte too much to be chopped off.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ePdfDocument\u003c/code\u003e and \u003ccode\u003ePdfImage.load_jpeg()\u003c/code\u003e: With byte stream input, in the \u003ccode\u003e_buffer_reader\u003c/code\u003e callback, check that the number of bytes read into the buffer is no less than the buffer's size, otherwise indicate error.\n\u003ccode\u003e@Stjorn\u003c/code\u003e filed a security ticket that triggered this change; however we consider this more of a theoretical safety \u003cem\u003eenhancement\u003c/em\u003e and not actually a vulnerability, since under valid cirucmstances we do not envisage a situation where \u003ccode\u003ereadinto()\u003c/code\u003e would fall short on data. \u003ca href=\"https://vulnbrocards.com/brocards/vb002-no-exploit-from-heavens/\"\u003eNo exploit from the heavens.\u003c/a\u003e Updated documentation.\n(With older versions of pypdfium2, consider wrapping buffer input so that \u003ccode\u003ereadinto()\u003c/code\u003e raises an exception if it could not consume enough data to fill the buffer.)\u003c/li\u003e\n\u003cli\u003eIn \u003ccode\u003ePdfBitmap\u003c/code\u003e, unconditionally call \u003ccode\u003eFPDFBitmap_Destroy()\u003c/code\u003e when the bitmap is closed/finalized, i.e. including bitmaps created from a native, pdfium-external buffer (the default). The API does not affect external buffers, but assumably should still be called to release the \u003ccode\u003eFPDF_BITMAP\u003c/code\u003e shell itself.\u003c/li\u003e\n\u003cli\u003eOn foreign bitmaps, \u003ccode\u003ePdfBitmap.close()\u003c/code\u003e now warns about being a potentially unsafe operation, since it frees the C-side buffer. Set \u003ccode\u003e.warn_on_close = False\u003c/code\u003e to silence the warning, if you have made sure your usage is safe.\u003c/li\u003e\n\u003cli\u003eIn \u003ccode\u003eAutoCloseable\u003c/code\u003e, avoid assigning \u003ccode\u003eself\u003c/code\u003e to an instance attribute. This should result in improved GC behavior. Many thanks to James Barlow for pointing this out.\u003c/li\u003e\n\u003cli\u003eAdded bindings to some new PDFium APIs, along with CLI integration:\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ePdfAttachment\u003c/code\u003e: \u003ccode\u003e.{get,set}_desc()\u003c/code\u003e to read/write attachment descriptions, and \u003ccode\u003e.get_subtype()\u003c/code\u003e to obtain the MIME type.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ePdfBookmark.get_style()\u003c/code\u003e and \u003ccode\u003ePdfBookmarkStyle\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cem\u003eBuilds\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBuild scripts \u0026amp; CI: Updated PDFium pin from \u003ccode\u003e7913\u003c/code\u003e to \u003ccode\u003e8076\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003eUpdated \u003ccode\u003egn-dist\u003c/code\u003e from \u003ccode\u003e2407.3\u003c/code\u003e to \u003ccode\u003e2540.0\u003c/code\u003e (the \u003ccode\u003e2501\u003c/code\u003e build passed unused by pypdfium2).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePyodide: Patch freetype load flags to avoid \u003ccode\u003eFT_Load_Glyph()\u003c/code\u003e somehow corrupting the heap. It seems that this addresses the previously encountered crashes/freezes; however, the exact cause remains elusive. Anyway, many thanks to Hood Chatham for this finding.\n\u003cul\u003e\n\u003cli\u003eDropped debug symbols. Enabled PyPI upload. Updated documentation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cem\u003eSetup\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRefactored ctypesgen integration. It is now cloned into pypdfium2's source tree and bundled in sdists. This avoids having an external git URL in pyproject setup dependencies that defeats the idea of a hermetic (self-contained) package index. ctypesgen's own setup and versioning code has been removed, owing to the project's special status as setup-only dependency with a head-to-head development model that allows for a constantly evolving API. See the \u003ca href=\"https://github.com/pypdfium2-team/ctypesgen/blob/acf905804b2ae50d2b230308e1ca62875f4fe16c/README.md#installation\"\u003eupdated pypdfium2-ctypesgen \u003ccode\u003eREADME.md\u003c/code\u003e\u003c/a\u003e for integration instructions. This also made Python 3.6 compatibility straightforward to restore after all, aligning to a common baseline with pypdfium2 and gn-dist.\u003c/li\u003e\n\u003cli\u003eDropped module splitting (\u003ccode\u003ePYPDFIUM_MODULES={raw,helpers}\u003c/code\u003e) and the \u003ccode\u003esystem-generate\u003c/code\u003e target, which had been introduced for pypdfium2's own conda packaging (see below).\u003c!-- raw HTML omitted --\u003e\nWe recognize that module splitting may still be desirable in some downstream packaging contexts; however, the dynamic implementation had been standing in the way of a proper \u003ccode\u003epyproject.toml\u003c/code\u003e migration, since the \u003ccode\u003e[project]\u003c/code\u003e table does not allow for \u003ccode\u003ename\u003c/code\u003e to be specified dynamically. This means we could not retain a first-party dynamic setting much longer without impairing the project's progress. Instead we suggest that you simply patch the project name / module include rules (possibly via some kind of automation) if module splitting is needed. This change does not affect the module layout in \u003ccode\u003esrc/\u003c/code\u003e which upholds the logical separation.\u003c/li\u003e\n\u003cli\u003eLowered iOS min version from \u003ccode\u003e26_0\u003c/code\u003e to \u003ccode\u003e17_0\u003c/code\u003e thanks to an upstream contribution. (We have not released any iOS wheels yet, but it is handled in setup.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cem\u003eConda\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eRemoved pypdfium2's own conda packaging (\u003ccode\u003epypdfium2-team\u003c/code\u003e channel), following \u003ca href=\"https://github.com/mindee/doctr/discussions/2127\"\u003ethorough\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mindee/doctr/issues/113#issuecomment-5340008535\"\u003econsideration\u003c/a\u003e.\nUpstream \u003ccode\u003epdfium-binaries\u003c/code\u003e (\u003ccode\u003ebblanchon\u003c/code\u003e channel) followed suit and removed conda packaging as well, since pypdfium2 was the only known dependent.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eKey reasons include that it ended up covering far less platforms than we do with PyPI wheels, did not integrate with our own build strategies, and seemed fraught with workarounds.\nIn part, this has been a result of outsourcing the pdfium dependency (which seemed about the only viable option prior to \u003ca href=\"https://github.com/conda/ceps/blob/main/cep-0020.md\"\u003eCEP 20\u003c/a\u003e), along with other limitations, like conda generally supporting less platforms, and tight storage limits at \u003ccode\u003eanaconda.org\u003c/code\u003e that leave maintainers with tradeoffs between release frequency and platform inclusion vs. sustainability.\nThere is no fallback setup, either, which even seems to be an intentional limitation of conda's.\u003c/li\u003e\n\u003cli\u003eTo add to that, builds in a custom channel are inaccessible to dependents within the main anaconda/conda-forge ecosystems themselves, and generally a pain to manage, which resulted in negligible demand compared to PyPI. In short, the problems are manifold and technical debt is not far off.\u003c/li\u003e\n\u003cli\u003eThis means conda is effectively a third-party package environment similar to nixpkgs or Linux distribution packaging, unlike PyPI, which is a first-party package index where upstream authors publish directly. Conda build tools did not feel like being conceived for in-project packaging, either (the contrast to PyPA build backends is quite stark).\nOverall, there has been an unjustifably high complexity and amount of workarounds in relation to the low or nonexistent benefit.\u003c/li\u003e\n\u003cli\u003eTo be clear, any builds of pypdfium2 in conda-forge or anaconda/main are \u003ca href=\"https://github.com/pypdfium2-team/pypdfium2#unofficial-packages\"\u003eunofficial (third-party)\u003c/a\u003e. We generally do not recommend using third-party distributions of pypdfium2, and their varying maintainership is a potential concern as well. Anyway, we cannot support what we don't maintain.\u003c/li\u003e\n\u003cli\u003eInstead, we want to highlight that you can just install pypdfium2 from PyPI even in a conda env. There are no mandatory runtime dependencies, so the usual reasons against mixing in PyPI packages do not apply.\u003c/li\u003e\n\u003cli\u003e\u003cem\u003eMaintainer's note: If upstream ever (drastically) improve integration with custom channels to allow for meaningful first-party publishing, the door remains ajar to redo pypdfium2's conda packaging the CEP 20 way.\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBuild info\u003c/h3\u003e\n\u003cp\u003eThis release was made with the following build strategies:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePBIN: \u003ccode\u003e[macosx_arm64, macosx_x86_64, win_amd64, win_arm64, win32, manylinux_x86_64, manylinux_i686, manylinux_aarch64, manylinux_armv7l, manylinux_ppc64le, manylinux_mips64le, manylinux_mipsle, android_arm64_v8a, android_armeabi_v7a]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSBLD: \u003ccode\u003e[]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCIBW: \u003ccode\u003e[manylinux_riscv64, manylinux_loongarch64, manylinux_s390x, musllinux_x86_64, musllinux_aarch64, musllinux_armv7l, musllinux_i686, musllinux_ppc64le, musllinux_s390x, musllinux_riscv64, musllinux_loongarch64, pyodide_wasm32]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/21f85e273036f3bade4f67d896e1d05927e5f4b1\"\u003e\u003ccode\u003e21f85e2\u003c/code\u003e\u003c/a\u003e [autorelease main] update 5.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/1a9a921f26e2bf4c10754f3efb5172d6a77d43c1\"\u003e\u003ccode\u003e1a9a921\u003c/code\u003e\u003c/a\u003e Code style: change some \u003ccode\u003evar == 0\u003c/code\u003e checks to \u003ccode\u003enot var\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/46be6578997119ca06ec6b3e07cda2a0aba57e8e\"\u003e\u003ccode\u003e46be657\u003c/code\u003e\u003c/a\u003e PdfImage.extract(): improve implementation's code style\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/b2d146c20337339a440d8668a5c7056e3b48e1dc\"\u003e\u003ccode\u003eb2d146c\u003c/code\u003e\u003c/a\u003e PdfDocument.get_identifier() fix: avoid chopping off a byte too much\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/e856c86af6363f9326f8b7ab07a808ff6b68d7cc\"\u003e\u003ccode\u003ee856c86\u003c/code\u003e\u003c/a\u003e Add an errcheck to \u003ccode\u003ePdfAttachment.get_name()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/080d459a4536540fa65b13431dac3f1fa81001b6\"\u003e\u003ccode\u003e080d459\u003c/code\u003e\u003c/a\u003e sbuild: fix macOS wheel tag (version)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/3859503f346f3498aa0fe27c1fe8ef5883817e50\"\u003e\u003ccode\u003e3859503\u003c/code\u003e\u003c/a\u003e [autorelease main] update 5.14.0b1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/35304ab21576f896bef78738ad856ff7d9b037a2\"\u003e\u003ccode\u003e35304ab\u003c/code\u003e\u003c/a\u003e Prepare for a beta release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/f9859d3dc5b4ef1db28314dfb24737fb9b3eb58a\"\u003e\u003ccode\u003ef9859d3\u003c/code\u003e\u003c/a\u003e cli/toc: drop now-unnecessary pdfium version check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/d7ab55ea770a02ba3eeae066f10c32fc5865a262\"\u003e\u003ccode\u003ed7ab55e\u003c/code\u003e\u003c/a\u003e Fix weird changelog wording\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/compare/4.30.0...5.14.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 `redis` to 8.1.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.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values ...\n\n_Description has been truncated_","html_url":"https://github.com/0ssol1620-byte/ai-knowledge-compiler/pull/133","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/0ssol1620-byte%2Fai-knowledge-compiler/issues/133","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/133/packages"},{"uuid":"6024503547","node_id":"PR_kwDORyAvrM8AAAABKk7o2Q","number":125,"state":"closed","title":"fix(deps): bump the minor-and-patch group with 8 updates","user":"dependabot[bot]","labels":["dependencies","python:uv","released"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-10-25T12:38:14.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-25T12:37:18.000Z","updated_at":"2026-10-25T16:36:10.000Z","time_to_close":56,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"fix(deps): bump","group_name":"minor-and-patch","update_count":8,"packages":[{"name":"google-auth","old_version":"2.59.1","new_version":"2.62.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"tenacity","old_version":"9.1.4","new_version":"9.2.1","repository_url":"https://github.com/jd/tenacity"},{"name":"pydantic","old_version":"2.13.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"openai","old_version":"3.24.0","new_version":"3.35.1","repository_url":"https://github.com/openai/openai-python"},{"name":"anthropic","old_version":"1.11.0","new_version":"1.15.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"sqlalchemy","old_version":"2.1.4","new_version":"2.1.5","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"pre-commit","old_version":"4.6.2","new_version":"4.7.0","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"ruff","old_version":"0.16.10","new_version":"0.17.1","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the minor-and-patch group with 8 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [google-auth](https://github.com/googleapis/google-cloud-python) | `2.59.1` | `2.62.0` |\n| [tenacity](https://github.com/jd/tenacity) | `9.1.4` | `9.2.1` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.5` | `2.14.1` |\n| [openai](https://github.com/openai/openai-python) | `3.24.0` | `3.35.1` |\n| [anthropic](https://github.com/anthropics/anthropic-sdk-python) | `1.11.0` | `1.15.0` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.1.4` | `2.1.5` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.2` | `4.7.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.10` | `0.17.1` |\n\nUpdates `google-auth` from 2.59.1 to 2.62.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-auth's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-auth: v2.62.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.61.0...google-auth-v2.62.0\"\u003e2.62.0\u003c/a\u003e (2026-10-12)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eauth:\u003c/strong\u003e enable bound ID tokens by default on Cloud Run (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18635\"\u003e#18635\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/8b625c4927371992f4569962292299eced040047\"\u003e8b625c4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-auth: v2.61.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.60.0...google-auth-v2.61.0\"\u003e2.61.0\u003c/a\u003e (2026-10-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eauth:\u003c/strong\u003e support bound access and ID tokens for GKE (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18594\"\u003e#18594\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/9f5fd7bdf0707a17c363482b094ccd70a4358389\"\u003e9f5fd7b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-auth: v2.60.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.59.1...google-auth-v2.60.0\"\u003e2.60.0\u003c/a\u003e (2026-10-02)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eauth:\u003c/strong\u003e Support sync credentials in AsyncAuthorizedSession (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18542\"\u003e#18542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/379956865248ebc40e5b851ede520056e65abcac\"\u003e3799568\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/5deaacb67a812e7afa0a647ddf744ebdcf59b270\"\u003e\u003ccode\u003e5deaacb\u003c/code\u003e\u003c/a\u003e chore(main): release google-auth 2.62.0 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18637\"\u003e#18637\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/8b625c4927371992f4569962292299eced040047\"\u003e\u003ccode\u003e8b625c4\u003c/code\u003e\u003c/a\u003e feat(auth): enable bound ID tokens by default on Cloud Run (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18635\"\u003e#18635\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/98fc3045ce3e3c5979f7bc7536bc7d0ef8f9a43b\"\u003e\u003ccode\u003e98fc304\u003c/code\u003e\u003c/a\u003e feat(dbapi): wire timeout parameter through Connection to execute_sql (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18484\"\u003e#18484\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/0cabf7cb08254e3d068c1a4579e9028adf585047\"\u003e\u003ccode\u003e0cabf7c\u003c/code\u003e\u003c/a\u003e test(spanner): increase stale database cleanup cutoff to 3 hours (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18633\"\u003e#18633\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/ab564738979f07c29ffb5774cdaa47307540ebe0\"\u003e\u003ccode\u003eab56473\u003c/code\u003e\u003c/a\u003e perf(spanner): prune lock and begin event allocations on single-use snapshots...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/78b9da2ed66434099f786b6d785d3855e5457075\"\u003e\u003ccode\u003e78b9da2\u003c/code\u003e\u003c/a\u003e fix(google-cloud-spanner): do not replay DDL statements on transaction retry ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f18a11eb4308b9a8889166ea3c1246fb8306a906\"\u003e\u003ccode\u003ef18a11e\u003c/code\u003e\u003c/a\u003e feat(db-dtypes): support pandas 3.1 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18590\"\u003e#18590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/590e43da42fea4f08be7b29b3bf63c3c3a33d112\"\u003e\u003ccode\u003e590e43d\u003c/code\u003e\u003c/a\u003e fix(bigquery): accept empty sourceFormat fields (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18472\"\u003e#18472\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/05b37756b0c4cb43ae978c928e90b1ff40a07ccd\"\u003e\u003ccode\u003e05b3775\u003c/code\u003e\u003c/a\u003e perf(spanner): optimize single-chunk results and single-row lookups (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18602\"\u003e#18602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/a7678fd8c797e20d6f1fe0c8af84e7ded451f923\"\u003e\u003ccode\u003ea7678fd\u003c/code\u003e\u003c/a\u003e fix(spanner): eliminate duplicate metrics capture and measure full streaming ...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.59.1...google-auth-v2.62.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tenacity` from 9.1.4 to 9.2.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jd/tenacity/releases\"\u003etenacity's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.2.1\u003c/h2\u003e\n\u003cp\u003e9.2.0 was tagged but never reached PyPI: the upload rejected its package description (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/714\"\u003e#714\u003c/a\u003e). 9.2.1 is the first release on PyPI with everything in \u003ca href=\"https://github.com/jd/tenacity/releases/tag/9.2.0\"\u003e9.2.0\u003c/a\u003e, plus the changes below.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore(mypy): drop vestigial tornado ignore_missing_imports override by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/676\"\u003ejd/tenacity#676\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: annotate wait_base.\u003cstrong\u003eradd\u003c/strong\u003e as taking the int seed from sum() by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/677\"\u003ejd/tenacity#677\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(mypy): enable the strictness options \u003ccode\u003estrict\u003c/code\u003e leaves off by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/678\"\u003ejd/tenacity#678\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: drop always-true truthiness checks and enable truthy-bool by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/679\"\u003ejd/tenacity#679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: declare BaseAction's REPR_FIELDS and NAME as ClassVar by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/680\"\u003ejd/tenacity#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: fix possibly-undefined and deprecated call sites by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/681\"\u003ejd/tenacity#681\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: mark overridden methods with \u003ca href=\"https://github.com/override\"\u003e\u003ccode\u003e@​override\u003c/code\u003e\u003c/a\u003e by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/682\"\u003ejd/tenacity#682\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: restore support for falsy wait values and callable + strategy by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/694\"\u003ejd/tenacity#694\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: read the tornado global live instead of an import-time snapshot by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/696\"\u003ejd/tenacity#696\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect enabled=False on the direct-call path by \u003ca href=\"https://github.com/mahirhir\"\u003e\u003ccode\u003e@​mahirhir\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/645\"\u003ejd/tenacity#645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: only treat None and 0 as \u0026quot;no wait\u0026quot; by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/741\"\u003ejd/tenacity#741\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: restore PyPI-compatible package description by \u003ca href=\"https://github.com/arindamsikder\"\u003e\u003ccode\u003e@​arindamsikder\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/725\"\u003ejd/tenacity#725\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: check built distributions with twine by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/742\"\u003ejd/tenacity#742\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/mahirhir\"\u003e\u003ccode\u003e@​mahirhir\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/645\"\u003ejd/tenacity#645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kozlek\"\u003e\u003ccode\u003e@​kozlek\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/733\"\u003ejd/tenacity#733\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/arindamsikder\"\u003e\u003ccode\u003e@​arindamsikder\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/725\"\u003ejd/tenacity#725\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jd/tenacity/compare/9.2.0...9.2.1\"\u003ehttps://github.com/jd/tenacity/compare/9.2.0...9.2.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e9.2.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix ordinal suffix generation for large numbers ending in 11, 12, 13 by \u003ca href=\"https://github.com/ArmaanjeetSandhu\"\u003e\u003ccode\u003e@​ArmaanjeetSandhu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/556\"\u003ejd/tenacity#556\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: replace tox with poethepoet + uv by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/558\"\u003ejd/tenacity#558\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix README badges by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/559\"\u003ejd/tenacity#559\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add project URLs to pyproject.toml by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/560\"\u003ejd/tenacity#560\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add local dev commands to contribute section by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/561\"\u003ejd/tenacity#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: modernize async examples by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/562\"\u003ejd/tenacity#562\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: set version in sphinx conf by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/563\"\u003ejd/tenacity#563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve tornado mypy errors instead of suppressing them by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/568\"\u003ejd/tenacity#568\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add poe fmt task for auto-formatting by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/569\"\u003ejd/tenacity#569\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: replace curio example with trio by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/570\"\u003ejd/tenacity#570\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: enable ruff I, UP, B rules and auto-fix codebase by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/571\"\u003ejd/tenacity#571\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: harden release workflow by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/575\"\u003ejd/tenacity#575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use typing.Self on Python 3.11+ instead of typing_extensions by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/576\"\u003ejd/tenacity#576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump tornado version floor to \u0026gt;=6.0 by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/578\"\u003ejd/tenacity#578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clean up sphinx conf.py by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/579\"\u003ejd/tenacity#579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove stale noqa comments from \u003cstrong\u003einit\u003c/strong\u003e.py by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/577\"\u003ejd/tenacity#577\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: enable additional ruff rules and fix violations by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/584\"\u003ejd/tenacity#584\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: enable mypy strict mode in all test files by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/585\"\u003ejd/tenacity#585\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: make LoggerProtocol compatible with logging.Logger by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/586\"\u003ejd/tenacity#586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove unused IterState.delay_since_first_attempt field by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/587\"\u003ejd/tenacity#587\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove redundant raise before reraise() by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/588\"\u003ejd/tenacity#588\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: replace deprecated typing.Pattern with re.Pattern by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/589\"\u003ejd/tenacity#589\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix typos in docstrings by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/590\"\u003ejd/tenacity#590\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/jd/tenacity/commit/4410996dd9a96864a2733ce0778bcaa112b72811\"\u003e\u003ccode\u003e4410996\u003c/code\u003e\u003c/a\u003e ci: check built distributions with twine (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/b23844175feb8c62f4ebb0ef0833d993f439fa1f\"\u003e\u003ccode\u003eb238441\u003c/code\u003e\u003c/a\u003e fix: restore PyPI-compatible package description (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/b6201eceedfc719e996dcbc3f6c17f21011fb236\"\u003e\u003ccode\u003eb6201ec\u003c/code\u003e\u003c/a\u003e fix: only treat None and 0 as \u0026quot;no wait\u0026quot; (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/4a74682e0186b5f2d25906aa190cd639c705a958\"\u003e\u003ccode\u003e4a74682\u003c/code\u003e\u003c/a\u003e ci: drop the Mergify queue rule (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/739\"\u003e#739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/91169719f4fd127d680cafe026f1f95f04292094\"\u003e\u003ccode\u003e9116971\u003c/code\u003e\u003c/a\u003e ci: drop Mergify dismiss_reviews rule (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/737\"\u003e#737\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/2374b61424aab29769c3428b06d576ffc1a5a1d9\"\u003e\u003ccode\u003e2374b61\u003c/code\u003e\u003c/a\u003e ci: rely on the ruleset for the ci-gate check (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/736\"\u003e#736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/6df1aab1a2df84f2779f5f308c6171df9d051a35\"\u003e\u003ccode\u003e6df1aab\u003c/code\u003e\u003c/a\u003e ci: gate merges on a single ci-gate job (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/734\"\u003e#734\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/5f540fad77cbd90b4bcb21a9b859d5b07c08ba54\"\u003e\u003ccode\u003e5f540fa\u003c/code\u003e\u003c/a\u003e chore(mergify): replace deprecated autoqueue with auto_merge_conditions (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/8be01b1daf2010566fd936a5c2214efefa43edff\"\u003e\u003ccode\u003e8be01b1\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump ruff from 0.16.5 to 0.16.9 in the python group (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/3e58094d3bc414975aad9eadf343a32bdb3b89b3\"\u003e\u003ccode\u003e3e58094\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump the python group with 2 updates (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/707\"\u003e#707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jd/tenacity/compare/9.1.4...9.2.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 3.24.0 to 3.35.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.35.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.35.0...v3.35.1\"\u003e3.35.1\u003c/a\u003e (2026-10-18)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003epreserve beta Realtime byte reads on websockets 13 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4102\"\u003e#4102\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/5766349b2eda3ef63389fe8a30b6a9a1082b33e9\"\u003e5766349\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.35.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.34.0...v3.35.0\"\u003e3.35.0\u003c/a\u003e (2026-10-17)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add typed Live sideband events (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4099\"\u003e#4099\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8d5cbf07916b8f2409d940156135ce3c11ac1552\"\u003e8d5cbf0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add ultrafast service tier for Agents (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4101\"\u003e#4101\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/100bf8f7ab8409594258572fbf64bbde140c1c5f\"\u003e100bf8f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003erealtime:\u003c/strong\u003e preserve byte receives with websockets 13 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4098\"\u003e#4098\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/309916eb877132359ca2e37b0340a060580e39ee\"\u003e309916e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.34.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.33.0...v3.34.0\"\u003e3.34.0\u003c/a\u003e (2026-10-17)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add degraded external storage status (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4097\"\u003e#4097\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/b216cb2fbdefebba6f3997a180510f9e2b6b41af\"\u003eb216cb2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add Realtime Translation WebSocket sessions (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4095\"\u003e#4095\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/bfada5040b0171cd0ae61aefae8c78fcf83c804a\"\u003ebfada50\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.33.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.32.0...v3.33.0\"\u003e3.33.0\u003c/a\u003e (2026-10-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add safety identifiers to image requests and responses (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4093\"\u003e#4093\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/c969e32ebb325b5910aff4543187fedc5527e172\"\u003ec969e32\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e share Decisions cache breakpoint parameter type (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4092\"\u003e#4092\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/f7cefdaf059a3e6856d49b4bc2e2e5fbdef8193b\"\u003ef7cefda\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.32.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.31.0...v3.32.0\"\u003e3.32.0\u003c/a\u003e (2026-10-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add cache settings and key options [2/2] (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4087\"\u003e#4087\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/325da45934ddb1c1b6a0bed1681a8cf46c9a8712\"\u003e325da45\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add prompt-based voice creation (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4091\"\u003e#4091\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2e39db79e2f0ec41ce5d87b379be1e88c8298ea4\"\u003e2e39db7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add regional processing residency options (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4081\"\u003e#4081\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/21ce0c2eae47b389f25d79095d2ac5aec7812806\"\u003e21ce0c2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add response error diagnostics and model notices (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4086\"\u003e#4086\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/e71d781ac5e7b3f365ac130bf338baaf13ae720d\"\u003ee71d781\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/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.35.0...v3.35.1\"\u003e3.35.1\u003c/a\u003e (2026-10-18)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003epreserve beta Realtime byte reads on websockets 13 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4102\"\u003e#4102\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/5766349b2eda3ef63389fe8a30b6a9a1082b33e9\"\u003e5766349\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.34.0...v3.35.0\"\u003e3.35.0\u003c/a\u003e (2026-10-17)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add typed Live sideband events (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4099\"\u003e#4099\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8d5cbf07916b8f2409d940156135ce3c11ac1552\"\u003e8d5cbf0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add ultrafast service tier for Agents (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4101\"\u003e#4101\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/100bf8f7ab8409594258572fbf64bbde140c1c5f\"\u003e100bf8f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003erealtime:\u003c/strong\u003e preserve byte receives with websockets 13 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4098\"\u003e#4098\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/309916eb877132359ca2e37b0340a060580e39ee\"\u003e309916e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.33.0...v3.34.0\"\u003e3.34.0\u003c/a\u003e (2026-10-17)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add degraded external storage status (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4097\"\u003e#4097\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/b216cb2fbdefebba6f3997a180510f9e2b6b41af\"\u003eb216cb2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add Realtime Translation WebSocket sessions (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4095\"\u003e#4095\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/bfada5040b0171cd0ae61aefae8c78fcf83c804a\"\u003ebfada50\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.32.0...v3.33.0\"\u003e3.33.0\u003c/a\u003e (2026-10-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add safety identifiers to image requests and responses (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4093\"\u003e#4093\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/c969e32ebb325b5910aff4543187fedc5527e172\"\u003ec969e32\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e share Decisions cache breakpoint parameter type (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4092\"\u003e#4092\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/f7cefdaf059a3e6856d49b4bc2e2e5fbdef8193b\"\u003ef7cefda\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.31.0...v3.32.0\"\u003e3.32.0\u003c/a\u003e (2026-10-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add cache settings and key options [2/2] (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4087\"\u003e#4087\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/325da45934ddb1c1b6a0bed1681a8cf46c9a8712\"\u003e325da45\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add prompt-based voice creation (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4091\"\u003e#4091\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2e39db79e2f0ec41ce5d87b379be1e88c8298ea4\"\u003e2e39db7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add regional processing residency options (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4081\"\u003e#4081\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/21ce0c2eae47b389f25d79095d2ac5aec7812806\"\u003e21ce0c2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add response error diagnostics and model notices (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4086\"\u003e#4086\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/e71d781ac5e7b3f365ac130bf338baaf13ae720d\"\u003ee71d781\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e support audio fixture playback in Live sessions (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4085\"\u003e#4085\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/9998c1a3806afda55cb3923de1f7f49adcff5a7f\"\u003e9998c1a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e support Decisions in Live sessions (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4088\"\u003e#4088\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/230a923faba5574ebdc5b45a505a26b6bad79f61\"\u003e230a923\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\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/openai/openai-python/commit/547ecb1e4fc233f19030736c29fee4374dfbaca1\"\u003e\u003ccode\u003e547ecb1\u003c/code\u003e\u003c/a\u003e release: 3.35.1 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4103\"\u003e#4103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/5766349b2eda3ef63389fe8a30b6a9a1082b33e9\"\u003e\u003ccode\u003e5766349\u003c/code\u003e\u003c/a\u003e fix: preserve beta Realtime byte reads on websockets 13 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4102\"\u003e#4102\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/ab914006a2f520c5d63a69a60b40725ca5c72459\"\u003e\u003ccode\u003eab91400\u003c/code\u003e\u003c/a\u003e release: 3.35.0 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4100\"\u003e#4100\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/100bf8f7ab8409594258572fbf64bbde140c1c5f\"\u003e\u003ccode\u003e100bf8f\u003c/code\u003e\u003c/a\u003e feat(api): add ultrafast service tier for Agents (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4101\"\u003e#4101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8d5cbf07916b8f2409d940156135ce3c11ac1552\"\u003e\u003ccode\u003e8d5cbf0\u003c/code\u003e\u003c/a\u003e feat(api): add typed Live sideband events (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4099\"\u003e#4099\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/309916eb877132359ca2e37b0340a060580e39ee\"\u003e\u003ccode\u003e309916e\u003c/code\u003e\u003c/a\u003e fix(realtime): preserve byte receives with websockets 13 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4098\"\u003e#4098\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/3eb0837536bdd079f986c78964abb014fd6289ae\"\u003e\u003ccode\u003e3eb0837\u003c/code\u003e\u003c/a\u003e release: 3.34.0 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4096\"\u003e#4096\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/b216cb2fbdefebba6f3997a180510f9e2b6b41af\"\u003e\u003ccode\u003eb216cb2\u003c/code\u003e\u003c/a\u003e feat(api): add degraded external storage status (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4097\"\u003e#4097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/bfada5040b0171cd0ae61aefae8c78fcf83c804a\"\u003e\u003ccode\u003ebfada50\u003c/code\u003e\u003c/a\u003e feat(api): add Realtime Translation WebSocket sessions (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4095\"\u003e#4095\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/b7c5e5d67ee67d2f49a98f14a43abb8e7e502bb1\"\u003e\u003ccode\u003eb7c5e5d\u003c/code\u003e\u003c/a\u003e release: 3.33.0 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4094\"\u003e#4094\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v3.24.0...v3.35.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anthropic` from 1.11.0 to 1.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/releases\"\u003eanthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.15.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add between_tools to thinking types in model capabilities\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add the speed parameter and usage.speed to Messages\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e return a Console organization's usage-tier spend cap as a read-only spend limit\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eci:\u003c/strong\u003e speed up breaking change detection\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e describe headers on Managed Agents and telemetry endpoints\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e simplify the script that formats code blocks in docs\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e cover OpenTelemetry options and method default timeouts\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e note that some models need a beta header to use speed\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.14.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add execution_identity to Managed Agents agents\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add organization_type_not_supported error to spend limit lists\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add telemetry destination test endpoint\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add telemetry destinations to the Admin API\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eclient:\u003c/strong\u003e add native support for OpenTelemetry tracing\u003c/p\u003e\n\u003cp\u003eIf your app registers a global tracer provider, the SDK will create spans with it after upgrading, and they'll be exported with the rest of your traces. Requests will also get trace context headers from the global propagator. To disable, pass \u003ccode\u003eopen_telemetry=False\u003c/code\u003e to the client or set \u003ccode\u003eANTHROPIC_OPEN_TELEMETRY=false\u003c/code\u003e. Learn more in the \u003ca href=\"https://platform.claude.com/docs/en/manage-claude/opentelemetry/sdk\"\u003edocumentation\u003c/a\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e rename telemetry destination test response model\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e close dropped streams without waiting for the collector\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003estreaming:\u003c/strong\u003e pass unknown event types through the message stream helpers\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003estreaming:\u003c/strong\u003e stop raising \u0026quot;Unexpected event order\u0026quot; for an event before message_start\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e correct prefill, thinking, fallback and model descriptions\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e document the scope required to assign the managed role\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e update model examples\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e narrow the tripwire test rule in the contributor guides\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md\"\u003eanthropic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v1.14.0...v1.15.0\"\u003e1.15.0\u003c/a\u003e (2026-10-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add between_tools to thinking types in model capabilities\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add the speed parameter and usage.speed to Messages\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e return a Console organization's usage-tier spend cap as a read-only spend limit\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eci:\u003c/strong\u003e speed up breaking change detection\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e describe headers on Managed Agents and telemetry endpoints\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e simplify the script that formats code blocks in docs\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e cover OpenTelemetry options and method default timeouts\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e note that some models need a beta header to use speed\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v1.13.0...v1.14.0\"\u003e1.14.0\u003c/a\u003e (2026-10-14)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add execution_identity to Managed Agents agents\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add organization_type_not_supported error to spend limit lists\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add telemetry destination test endpoint\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add telemetry destinations to the Admin API\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eclient:\u003c/strong\u003e add native support for OpenTelemetry tracing\u003c/p\u003e\n\u003cp\u003eIf your app registers a global tracer provider, the SDK will create spans with it after upgrading, and they'll be exported with the rest of your traces. Requests will also get trace context headers from the global propagator. To disable, pass \u003ccode\u003eopen_telemetry=False\u003c/code\u003e to the client or set \u003ccode\u003eANTHROPIC_OPEN_TELEMETRY=false\u003c/code\u003e. Learn more in the \u003ca href=\"https://platform.claude.com/docs/en/manage-claude/opentelemetry/sdk\"\u003edocumentation\u003c/a\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e rename telemetry destination test response model\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e close dropped streams without waiting for the collector\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003estreaming:\u003c/strong\u003e pass unknown event types through the message stream helpers\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003estreaming:\u003c/strong\u003e stop raising \u0026quot;Unexpected event order\u0026quot; for an event before message_start\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e correct prefill, thinking, fallback and model descriptions\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e document the scope required to assign the managed role\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e update model examples\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e narrow the tripwire test rule in the contributor guides\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/bcd55fe1d3f0f1240765f8cef04295b67337f55a\"\u003e\u003ccode\u003ebcd55fe\u003c/code\u003e\u003c/a\u003e release: 1.15.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/69743442287cc974aa9ff94d982f2c313f88edd2\"\u003e\u003ccode\u003e6974344\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/1021\"\u003e#1021\u003c/a\u003e from anthropics/synced/published\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/80404f64daa02dac4f75bf658c490dcae86f3910\"\u003e\u003ccode\u003e80404f6\u003c/code\u003e\u003c/a\u003e chore(tests): cover OpenTelemetry options and method default timeouts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/ef9133691b1eb0c0dc82c91398300e1a7b602674\"\u003e\u003ccode\u003eef91336\u003c/code\u003e\u003c/a\u003e feat(helpers): retry a rate-limited fast fallback at standard speed (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/1024\"\u003e#1024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/9ace6c5c771031812b91b4f2e539aa1e72448769\"\u003e\u003ccode\u003e9ace6c5\u003c/code\u003e\u003c/a\u003e feat(api): add between_tools to thinking types in model capabilities\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d44d21886402b894a3698defeaa89ea1455a845d\"\u003e\u003ccode\u003ed44d218\u003c/code\u003e\u003c/a\u003e chore(docs): describe headers on Managed Agents and telemetry endpoints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/ef59b87af236955e0dc47e0a95eb74b092944089\"\u003e\u003ccode\u003eef59b87\u003c/code\u003e\u003c/a\u003e docs(api): note that some models need a beta header to use speed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/c10fe778731adce8f584ef888b4bba3a04913d62\"\u003e\u003ccode\u003ec10fe77\u003c/code\u003e\u003c/a\u003e docs(changelog): shorten the OpenTelemetry tracing note (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/1023\"\u003e#1023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5b187415d6426bae8a76a76e46934418d85e3e71\"\u003e\u003ccode\u003e5b18741\u003c/code\u003e\u003c/a\u003e chore(internal): simplify the script that formats code blocks in docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f0e30dcc1740e121bcd08dff3341bfbd0e4f9fb0\"\u003e\u003ccode\u003ef0e30dc\u003c/code\u003e\u003c/a\u003e feat(api): add the speed parameter and usage.speed to Messages\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v1.11.0...v1.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.1.4 to 2.1.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.1.5\u003c/h1\u003e\n\u003cp\u003eReleased: October 16, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [feature]\u003c/strong\u003e Added the \u003ccode\u003e_orm.Unmapped\u003c/code\u003e annotation and the\n\u003ccode\u003e_orm.unmapped_column()\u003c/code\u003e construct, providing a declarative-compatible\napproach to having \u0026quot;excluded\u0026quot; columns in a Declarative model, that is,\ncolumns that are part of the \u003ccode\u003e_schema.Table\u003c/code\u003e but are not mapped,\nreplacing the use of \u003ccode\u003e_orm.Mapper.exclude_properties\u003c/code\u003e for this\npurpose when using a Declarative mapping.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13650\"\u003e#13650\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug] [regression]\u003c/strong\u003e Fixed regression caused by \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/11917\"\u003e#11917\u003c/a\u003e in version 2.0.36 where an ORM\nenabled \u003ccode\u003e_sql.update()\u003c/code\u003e using WHERE criteria which matched more than\none object present in the \u003ccode\u003e_orm.Session\u003c/code\u003e would expire server-side\nonupdate columns, as well as columns that were SET to a SQL expression, on\nonly one of the matched objects, leaving the remaining objects with stale\nvalues for those attributes. The columns are now expired for all matched\nobjects.\u003c/p\u003e\n\u003cp\u003eThis change is also \u003cstrong\u003ebackported\u003c/strong\u003e to: 2.0.55\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13675\"\u003e#13675\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [deprecated]\u003c/strong\u003e Using the \u003ccode\u003e_orm.Mapper.exclude_properties\u003c/code\u003e or\n\u003ccode\u003e_orm.Mapper.include_properties\u003c/code\u003e parameters on a Declarative\nmapping to exclude attributes that are declared on the class, such as with\n\u003ccode\u003e_orm.mapped_column()\u003c/code\u003e, is deprecated and now emits a deprecation\nwarning.  This use was never supported, and depending on the arguments\npassed to \u003ccode\u003e_orm.mapped_column()\u003c/code\u003e, the attribute could remain mapped\nregardless; in particular, as of 2.1 this includes ORM mapped dataclasses\nwhere \u003ccode\u003e_orm.mapped_column.default\u003c/code\u003e is present.  The new\n\u003ccode\u003e_orm.unmapped_column()\u003c/code\u003e construct should be used instead.  Excluding\ncolumns that are present only in the \u003ccode\u003e_schema.Table\u003c/code\u003e, such as those\nfrom \u003ccode\u003e__table__\u003c/code\u003e, \u003ccode\u003e__table_args__\u003c/code\u003e or table reflection, is not\naffected.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13650\"\u003e#13650\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eschema\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e[schema] [bug]\u003c/strong\u003e Fixed issue where dialect-specific keyword arguments established on a\n\u003ccode\u003eForeignKeyConstraint\u003c/code\u003e, \u003ccode\u003eForeignKey\u003c/code\u003e or\n\u003ccode\u003eCheckConstraint\u003c/code\u003e, such as \u003ccode\u003epostgresql_not_valid\u003c/code\u003e, were not\ncarried along to the copy of the constraint produced by\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 4.6.2 to 4.7.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.7.0\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks during commit with \u003ccode\u003e-a\u003c/code\u003e or inside a submodule.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3773\"\u003e#3773\u003c/a\u003e issue by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e PR by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.7.0 - 2026-10-12\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks during commit with \u003ccode\u003e-a\u003c/code\u003e or inside a submodule.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3773\"\u003e#3773\u003c/a\u003e issue by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e PR by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/65bb884a567e8be6adc51e8bfbcf26f708eb35a2\"\u003e\u003ccode\u003e65bb884\u003c/code\u003e\u003c/a\u003e v4.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/73926c191e10d2ede0ca627632e6e697d8092a61\"\u003e\u003ccode\u003e73926c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e from cbirkhold/node-no-git-env-npm-install\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/860d07d18211a0154ffaa4e77bf2a43c2b2473a9\"\u003e\u003ccode\u003e860d07d\u003c/code\u003e\u003c/a\u003e don't leak GIT_* env into \u003ccode\u003enpm install\u003c/code\u003e for \u003ccode\u003elanguage: node\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9ad8a0a99acec306e6e9c32490b0088008b83069\"\u003e\u003ccode\u003e9ad8a0a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3775\"\u003e#3775\u003c/a\u003e from pre-commit/contextlib-chdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9905e88afc7d860ccf21fba40fc9f5f23e0e0100\"\u003e\u003ccode\u003e9905e88\u003c/code\u003e\u003c/a\u003e use contextlib.chdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/59cb7925317a3c548ccb8cb17bbfb09d81ac8367\"\u003e\u003ccode\u003e59cb792\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3771\"\u003e#3771\u003c/a\u003e from pre-commit/all-repos_autofix_py311-plus\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2be170142fb6e0f1402a8bf036b5c9f8dd27fd09\"\u003e\u003ccode\u003e2be1701\u003c/code\u003e\u003c/a\u003e remove triple-nested withs for 3.14 coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/4c8d22aa125e68c6f45b4f71359c1bd7942f844f\"\u003e\u003ccode\u003e4c8d22a\u003c/code\u003e\u003c/a\u003e py311+\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/c4292384c94590cd8e6c68f677d95e3675994602\"\u003e\u003ccode\u003ec429238\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3770\"\u003e#3770\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f49e251f379f2c704e1223a791766e2bc9c78602\"\u003e\u003ccode\u003ef49e251\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.6.2...v4.7.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.16.10 to 0.17.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.17.1\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.17.1\u003c/h2\u003e\n\u003cp\u003e|  File  | Platform | Checksum |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.17.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-09.\u003c/p\u003e\n\u003cp\u003eThe executables in our macOS and Windows release archives and \u003ccode\u003eruff\u003c/code\u003e wheels are now code-signed.\nmacOS executables are signed with an Apple Developer ID certificate and notarized by Apple. Windows\nexecutables have timestamped Authenticode signatures from Azure Artifact Signing. This enables\nverification of the release publisher and binary integrity, supports publisher-based allowlisting,\nand should reduce security warnings and antivirus false positives.\u003c/p\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate the default and latest Python versions for 3.15 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28792\"\u003e#28792\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eRuff now defaults to Python 3.11 instead of 3.10 when no Python version is configured through\n\u003ca href=\"https://docs.astral.sh/ruff/settings/#target-version\"\u003e\u003ccode\u003etarget-version\u003c/code\u003e\u003c/a\u003e or\n\u003ca href=\"https://docs.astral.sh/ruff/configuration/#inferring-the-python-version\"\u003e\u003ccode\u003erequires-python\u003c/code\u003e\u003c/a\u003e. When\nchecking for syntax errors without a configured Python version, Ruff now defaults to Python 3.15\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/astral-sh/ruff/commit/4683270c69cbdaf6ad64d3f983fc458d5a43b41f\"\u003e\u003ccode\u003e4683270\u003c/code\u003e\u003c/a\u003e Bump version to 0.17.1 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29420\"\u003e#29420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3514027edb659bbc3c787d355be9d130e5587f15\"\u003e\u003ccode\u003e3514027\u003c/code\u003e\u003c/a\u003e [ty] Update typing conformance suite pin (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29417\"\u003e#29417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/829455624d78f2e89669e4b4b14af2b96abdb1ae\"\u003e\u003ccode\u003e8294556\u003c/code\u003e\u003c/a\u003e Update referenced PR security-review workflow (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29237\"\u003e#29237\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d1e1b1f69b511df4385f64b510eeec4da01c1a...\n\n_Description has been truncated_","html_url":"https://github.com/mini-app-polis/common-python-utils/pull/125","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mini-app-polis%2Fcommon-python-utils/issues/125","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/125/packages"},{"uuid":"6024093408","node_id":"PR_kwDOOEWHaM8AAAABKknaEg","number":4684,"state":"closed","title":"chore(deps): bump the integration-tests-minor-and-patch group across 1 directory with 58 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-10-25T17:51:03.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-25T11:47:11.000Z","updated_at":"2026-10-25T17:51:07.000Z","time_to_close":21832,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"integration-tests-minor-and-patch","update_count":58,"packages":[{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-asyncio","old_version":"1.3.0","new_version":"1.4.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"pytest-order","old_version":"1.3.0","new_version":"1.5.0","repository_url":"https://github.com/pytest-dev/pytest-order"},{"name":"aiohttp","old_version":"3.14.4","new_version":"3.14.5","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"aiokafka","old_version":"0.12.0","new_version":"0.14.0","repository_url":"https://github.com/aio-libs/aiokafka"},{"name":"aiolimiter","old_version":"1.2.1","new_version":"1.3.0","repository_url":"https://github.com/mjpieters/aiolimiter"},{"name":"azure-storage-blob","old_version":"12.28.0","new_version":"12.31.0","repository_url":"https://github.com/Azure/azure-sdk-for-python"},{"name":"azure-storage-file-share","old_version":"12.19.0","new_version":"12.27.0","repository_url":"https://github.com/Azure/azure-sdk-for-python"},{"name":"box-sdk-gen","old_version":"1.12.0","new_version":"1.17.0","repository_url":"https://github.com/box/box-python-sdk-gen"},{"name":"celery","old_version":"5.4.0","new_version":"5.6.3","repository_url":"https://github.com/celery/celery"},{"name":"confluent-kafka","old_version":"2.8.0","new_version":"2.16.0","repository_url":"https://github.com/confluentinc/confluent-kafka-python"},{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.2","repository_url":"https://github.com/pyca/cryptography"},{"name":"curl-cffi","old_version":"0.15.0","new_version":"0.16.3","repository_url":"https://github.com/lexiforest/curl_cffi"},{"name":"dependency-injector","old_version":"4.44.0","new_version":"4.49.1","repository_url":"https://github.com/ets-labs/python-dependency-injector"},{"name":"discord-py","old_version":"2.6.3","new_version":"2.7.1","repository_url":"https://github.com/Rapptz/discord.py"},{"name":"dropbox","old_version":"12.0.2","new_version":"12.2.3","repository_url":"https://github.com/dropbox/dropbox-sdk-python"},{"name":"docx2python","old_version":"3.5.0","new_version":"3.7.1","repository_url":"https://github.com/ShayHill/docx2python"},{"name":"fastapi","old_version":"0.136.3","new_version":"0.159.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"starlette","old_version":"1.7.0","new_version":"1.9.0","repository_url":"https://github.com/Kludex/starlette"},{"name":"feedparser","old_version":"6.0.12","new_version":"6.0.14","repository_url":"https://github.com/kurtmckee/feedparser"},{"name":"trafilatura","old_version":"2.0.0","new_version":"2.3.1","repository_url":"https://github.com/adbar/trafilatura"},{"name":"markdownify","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/matthewwithanm/python-markdownify"},{"name":"google-api-python-client","old_version":"2.161.0","new_version":"2.201.0","repository_url":"https://github.com/googleapis/google-api-python-client"},{"name":"google-auth-oauthlib","old_version":"1.2.1","new_version":"1.5.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"jsonschema","old_version":"4.23.0","new_version":"4.26.0","repository_url":"https://github.com/python-jsonschema/jsonschema"},{"name":"langchain-anthropic","old_version":"1.4.6","new_version":"1.7.6","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-aws","old_version":"1.1.0","new_version":"1.9.0","repository_url":"https://github.com/langchain-ai/langchain-aws"},{"name":"langchain-cohere","old_version":"0.5.0","new_version":"0.6.0","repository_url":"https://github.com/langchain-ai/langchain-cohere"},{"name":"langchain-community","old_version":"0.4.1","new_version":"0.4.2","repository_url":"https://github.com/langchain-ai/langchain-community"},{"name":"langchain-experimental","old_version":"0.4.0","new_version":"0.4.2","repository_url":"https://github.com/langchain-ai/langchain-experimental"},{"name":"langchain-fireworks","old_version":"1.1.0","new_version":"1.7.1","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-groq","old_version":"1.1.0","new_version":"1.1.3","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-ollama","old_version":"1.0.0","new_version":"1.1.0","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-openai","old_version":"1.1.14","new_version":"1.7.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-voyageai","old_version":"0.3.0","new_version":"0.4.1","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-xai","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain","old_version":"1.3.9","new_version":"1.4.7","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"markdown","old_version":"3.8.1","new_version":"3.11.2","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"monday-api-python-sdk","old_version":"1.6.5","new_version":"1.6.8","repository_url":"https://github.com/mondaycom/monday-api-python-sdk"},{"name":"msgspec","old_version":"0.20.0","new_version":"0.22.0","repository_url":"https://github.com/msgspec/msgspec"},{"name":"msgraph-sdk","old_version":"1.16.0","new_version":"1.64.0","repository_url":"https://github.com/microsoftgraph/msgraph-sdk-python"},{"name":"nats-py","old_version":"2.1.0","new_version":"2.16.0","repository_url":"https://github.com/nats-io/nats.py"},{"name":"numpy","old_version":"2.3.2","new_version":"2.5.4","repository_url":"https://github.com/numpy/numpy"},{"name":"opik","old_version":"2.2.99","new_version":"2.2.115","repository_url":"https://github.com/comet-ml/opik"},{"name":"pdfplumber","old_version":"0.11.9","new_version":"0.11.10","repository_url":"https://github.com/jsvine/pdfplumber"},{"name":"pillow-avif-plugin","old_version":"1.5.5","new_version":"1.6.0","repository_url":"https://github.com/fdintino/pillow-avif-plugin"},{"name":"prometheus-client","old_version":"0.21.1","new_version":"0.26.0","repository_url":"https://github.com/prometheus/client_python"},{"name":"pydantic","old_version":"2.12.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"python-arango","old_version":"8.1.5","new_version":"8.3.6","repository_url":"https://github.com/arangodb/python-arango"},{"name":"pymongo","old_version":"4.18.2","new_version":"4.19.0","repository_url":"https://github.com/mongodb/mongo-python-driver"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.4","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"redshift-connector","old_version":"2.1.17","new_version":"2.2.0","repository_url":"https://github.com/aws/amazon-redshift-python-driver"},{"name":"python-multipart","old_version":"0.0.31","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"qdrant-client","old_version":"1.13.1","new_version":"1.20.0","repository_url":"https://github.com/qdrant/qdrant-client"},{"name":"transformers","old_version":"5.18.0","new_version":"5.20.2","repository_url":"https://github.com/huggingface/transformers"},{"name":"slack-sdk","old_version":"3.27.0","new_version":"3.45.0","repository_url":"https://github.com/slackapi/python-slack-sdk"},{"name":"thrift","old_version":"0.24.0","new_version":"0.25.0"},{"name":"uvicorn","old_version":"0.37.0","new_version":"0.54.0","repository_url":"https://github.com/Kludex/uvicorn"}],"path":null,"ecosystem":"pip"},"body":"Bumps the integration-tests-minor-and-patch group with 58 updates in the /integration-tests directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `1.3.0` | `1.4.0` |\n| [pytest-order](https://github.com/pytest-dev/pytest-order) | `1.3.0` | `1.5.0` |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.14.4` | `3.14.5` |\n| [aiokafka](https://github.com/aio-libs/aiokafka) | `0.12.0` | `0.14.0` |\n| [aiolimiter](https://github.com/mjpieters/aiolimiter) | `1.2.1` | `1.3.0` |\n| [azure-storage-blob](https://github.com/Azure/azure-sdk-for-python) | `12.28.0` | `12.31.0` |\n| [azure-storage-file-share](https://github.com/Azure/azure-sdk-for-python) | `12.19.0` | `12.27.0` |\n| [box-sdk-gen](https://github.com/box/box-python-sdk-gen) | `1.12.0` | `1.17.0` |\n| [celery](https://github.com/celery/celery) | `5.4.0` | `5.6.3` |\n| [confluent-kafka](https://github.com/confluentinc/confluent-kafka-python) | `2.8.0` | `2.16.0` |\n| [cryptography](https://github.com/pyca/cryptography) | `50.0.0` | `50.0.2` |\n| [curl-cffi](https://github.com/lexiforest/curl_cffi) | `0.15.0` | `0.16.3` |\n| [dependency-injector](https://github.com/ets-labs/python-dependency-injector) | `4.44.0` | `4.49.1` |\n| [discord-py](https://github.com/Rapptz/discord.py) | `2.6.3` | `2.7.1` |\n| [dropbox](https://github.com/dropbox/dropbox-sdk-python) | `12.0.2` | `12.2.3` |\n| [docx2python](https://github.com/ShayHill/docx2python) | `3.5.0` | `3.7.1` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.3` | `0.159.1` |\n| [starlette](https://github.com/Kludex/starlette) | `1.7.0` | `1.9.0` |\n| [feedparser](https://github.com/kurtmckee/feedparser) | `6.0.12` | `6.0.14` |\n| [trafilatura](https://github.com/adbar/trafilatura) | `2.0.0` | `2.3.1` |\n| [markdownify](https://github.com/matthewwithanm/python-markdownify) | `1.2.2` | `1.2.3` |\n| [google-api-python-client](https://github.com/googleapis/google-api-python-client) | `2.161.0` | `2.201.0` |\n| [google-auth-oauthlib](https://github.com/googleapis/google-cloud-python) | `1.2.1` | `1.5.0` |\n| [jsonschema](https://github.com/python-jsonschema/jsonschema) | `4.23.0` | `4.26.0` |\n| [langchain-anthropic](https://github.com/langchain-ai/langchain) | `1.4.6` | `1.7.6` |\n| [langchain-aws](https://github.com/langchain-ai/langchain-aws) | `1.1.0` | `1.9.0` |\n| [langchain-cohere](https://github.com/langchain-ai/langchain-cohere) | `0.5.0` | `0.6.0` |\n| [langchain-community](https://github.com/langchain-ai/langchain-community) | `0.4.1` | `0.4.2` |\n| [langchain-experimental](https://github.com/langchain-ai/langchain-experimental) | `0.4.0` | `0.4.2` |\n| [langchain-fireworks](https://github.com/langchain-ai/langchain) | `1.1.0` | `1.7.1` |\n| [langchain-groq](https://github.com/langchain-ai/langchain) | `1.1.0` | `1.1.3` |\n| [langchain-ollama](https://github.com/langchain-ai/langchain) | `1.0.0` | `1.1.0` |\n| [langchain-openai](https://github.com/langchain-ai/langchain) | `1.1.14` | `1.7.2` |\n| [langchain-voyageai](https://github.com/langchain-ai/langchain) | `0.3.0` | `0.4.1` |\n| [langchain-xai](https://github.com/langchain-ai/langchain) | `1.1.0` | `1.3.0` |\n| [langchain](https://github.com/langchain-ai/langchain) | `1.3.9` | `1.4.7` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.8.1` | `3.11.2` |\n| [monday-api-python-sdk](https://github.com/mondaycom/monday-api-python-sdk) | `1.6.5` | `1.6.8` |\n| [msgspec](https://github.com/msgspec/msgspec) | `0.20.0` | `0.22.0` |\n| [msgraph-sdk](https://github.com/microsoftgraph/msgraph-sdk-python) | `1.16.0` | `1.64.0` |\n| [nats-py](https://github.com/nats-io/nats.py) | `2.1.0` | `2.16.0` |\n| [numpy](https://github.com/numpy/numpy) | `2.3.2` | `2.5.4` |\n| [opik](https://github.com/comet-ml/opik) | `2.2.99` | `2.2.115` |\n| [pdfplumber](https://github.com/jsvine/pdfplumber) | `0.11.9` | `0.11.10` |\n| [pillow-avif-plugin](https://github.com/fdintino/pillow-avif-plugin) | `1.5.5` | `1.6.0` |\n| [prometheus-client](https://github.com/prometheus/client_python) | `0.21.1` | `0.26.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.14.1` |\n| [python-arango](https://github.com/arangodb/python-arango) | `8.1.5` | `8.3.6` |\n| [pymongo](https://github.com/mongodb/mongo-python-driver) | `4.18.2` | `4.19.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.4` |\n| [redshift-connector](https://github.com/aws/amazon-redshift-python-driver) | `2.1.17` | `2.2.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.31` | `0.0.32` |\n| [qdrant-client](https://github.com/qdrant/qdrant-client) | `1.13.1` | `1.20.0` |\n| [transformers](https://github.com/huggingface/transformers) | `5.18.0` | `5.20.2` |\n| [slack-sdk](https://github.com/slackapi/python-slack-sdk) | `3.27.0` | `3.45.0` |\n| [thrift](http://thrift.apache.org) | `0.24.0` | `0.25.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.37.0` | `0.54.0` |\n\n\nUpdates `pytest` from 9.0.3 to 9.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.1.1\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.1 (2026-06-19)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e: Fixed a logic bug in \u003ccode\u003epytest.RaisesGroup\u003c/code\u003e which would might cause it to display incorrect \u0026quot;It matches \u003c!-- raw HTML omitted --\u003eFooError()\u003c!-- raw HTML omitted --\u003e which was paired with \u003c!-- raw HTML omitted --\u003eBarError\u003c!-- raw HTML omitted --\u003e\u0026quot; messages.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14591\"\u003e#14591\u003c/a\u003e: Fixed a regression in pytest 9.1.0 which caused overriding a parametrized fixture with an indirect \u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/pytest\"\u003e\u003ccode\u003e@​pytest\u003c/code\u003e\u003c/a\u003e.mark.parametrize\u003c!-- raw HTML omitted --\u003e to fail with \u0026quot;duplicate parametrization of '\u0026lt;fixture name\u0026gt;'\u0026quot;.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14606\"\u003e#14606\u003c/a\u003e: Fixed \u003ccode\u003elist-item\u003c/code\u003e typing errors from mypy in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e \u003ccode\u003eargvalues\u003c/code\u003e parameter.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14608\"\u003e#14608\u003c/a\u003e: Fixed a regression in pytest 9.1.0 where \u003ccode\u003econftest.py\u003c/code\u003e files located in \u003ccode\u003e\u0026lt;invocation dir\u0026gt;/test*\u003c/code\u003e were no longer loaded as initial conftests when invoked without arguments.\nThis could cause certain hooks (like \u003ccode\u003epytest_addoption\u003c/code\u003e) in these files to not fire.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e9.1.0\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.0 (2026-06-13)\u003c/h1\u003e\n\u003ch2\u003eRemovals and backward incompatible breaking changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14533\"\u003e#14533\u003c/a\u003e: When using \u003ccode\u003e--doctest-modules\u003c/code\u003e, autouse fixtures with \u003ccode\u003emodule\u003c/code\u003e, \u003ccode\u003epackage\u003c/code\u003e or \u003ccode\u003esession\u003c/code\u003e scope that are defined inline in Python test modules (not plugins or conftests) will now possibly execute twice.\u003c/p\u003e\n\u003cp\u003eIf this is undesirable, move the fixture definition to a \u003ccode\u003econftest.py\u003c/code\u003e file if possible.\u003c/p\u003e\n\u003cp\u003eTechnical explanation for those interested:\nWhen using \u003c!-- raw HTML omitted --\u003e--doctest-modules\u003c!-- raw HTML omitted --\u003e, pytest possibly collects Python modules twice, once as \u003ccode\u003epytest.Module\u003c/code\u003e and once as a \u003ccode\u003eDoctestModule\u003c/code\u003e (depending on the configuration).\nDue to improvements in pytest's fixture implementation, if e.g. the \u003ccode\u003eDoctestModule\u003c/code\u003e collects a fixture, it is now visible to it only, and not to the \u003ccode\u003eModule\u003c/code\u003e.\nThis means that both need to register the fixtures independently.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations (removal in next major release)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/10819\"\u003e#10819\u003c/a\u003e: Added a deprecation warning for class-scoped fixtures defined as instance methods (without \u003ccode\u003e@classmethod\u003c/code\u003e). Such fixtures set attributes on a different instance than the test methods use, leading to unexpected behavior. Use \u003ccode\u003e@classmethod\u003c/code\u003e decorator instead -- by \u003ccode\u003eyastcher\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003e10819\u003c/code\u003e and \u003ccode\u003e14011\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12882\"\u003e#12882\u003c/a\u003e: Calling \u003ccode\u003erequest.getfixturevalue() \u0026lt;pytest.FixtureRequest.getfixturevalue\u0026gt;\u003c/code\u003e during teardown to request a fixture that was not already requested is now deprecated and will become an error in pytest 10.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003edynamic-fixture-request-during-teardown\u003c/code\u003e for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13409\"\u003e#13409\u003c/a\u003e: Using non-\u003ccode\u003e~collections.abc.Collection\u003c/code\u003e iterables (such as generators, iterators, or custom iterable objects) for the \u003ccode\u003eargvalues\u003c/code\u003e parameter in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e and \u003ccode\u003emetafunc.parametrize \u0026lt;pytest.Metafunc.parametrize\u0026gt;\u003c/code\u003e is now deprecated.\u003c/p\u003e\n\u003cp\u003eThese iterables get exhausted after the first iteration,\nleading to tests getting unexpectedly skipped in cases such as running \u003ccode\u003epytest.main()\u003c/code\u003e multiple times,\nusing class-level parametrize decorators,\nor collecting tests multiple times.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003eparametrize-iterators\u003c/code\u003e for details and suggestions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13946\"\u003e#13946\u003c/a\u003e: The private \u003ccode\u003econfig.inicfg\u003c/code\u003e attribute is now deprecated.\nUse \u003ccode\u003econfig.getini() \u0026lt;pytest.Config.getini\u0026gt;\u003c/code\u003e to access configuration values instead.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003econfig-inicfg\u003c/code\u003e for more details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14004\"\u003e#14004\u003c/a\u003e: Passing \u003ccode\u003ebaseid\u003c/code\u003e to \u003ccode\u003e~pytest.FixtureDef\u003c/code\u003e or \u003ccode\u003enodeid\u003c/code\u003e strings to fixture registration APIs is now deprecated. These are internal pytest APIs that are used by some plugins.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/cf470ec0bf7eb89cd97dd56df4859eae5db46447\"\u003e\u003ccode\u003ecf470ec\u003c/code\u003e\u003c/a\u003e Prepare release version 9.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/e0c8ce6cc5db1f08363be6f152c32e6838df2690\"\u003e\u003ccode\u003ee0c8ce6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14625\"\u003e#14625\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/a07c31a97...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/1b82d1694fce22385ee7a4287917fbafbaf2e757\"\u003e\u003ccode\u003e1b82d16\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14624\"\u003e#14624\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/b375b79ec...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/501c4bc784da3b08bfcaa64858eba5d15dc59e53\"\u003e\u003ccode\u003e501c4bc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14596\"\u003e#14596\u003c/a\u003e from bluetech/doc-classmethod\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b61f588e36e9377c3d1d3f06bece1da0fc31d9ca\"\u003e\u003ccode\u003eb61f588\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14622\"\u003e#14622\u003c/a\u003e from chrisburr/fix-14608-initial-conftest-test-subdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/9a567e009f4d2da3ce1721c6db3109cb5744d40a\"\u003e\u003ccode\u003e9a567e0\u003c/code\u003e\u003c/a\u003e [automated] Update plugin list (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14617\"\u003e#14617\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14618\"\u003e#14618\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ef8b2993e5b48639e4a3d97d0525df9760781384\"\u003e\u003ccode\u003eef8b299\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14620\"\u003e#14620\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/680f9f3ed...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/66abd0784d4cb7c1ba44ab9a8896506cd4985acc\"\u003e\u003ccode\u003e66abd07\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e from bysiber/fix-stale-iexp-raisesgroup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/79fbf93b666cac5f27c9dad047943d47b766c8d5\"\u003e\u003ccode\u003e79fbf93\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14612\"\u003e#14612\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/974ed48b6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/0d312eb876177e9f1c04262b54060a41034ebf5c\"\u003e\u003ccode\u003e0d312eb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14611\"\u003e#14611\u003c/a\u003e from bluetech/parametrize-argvalues-typing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.0.3...9.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 1.3.0 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/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio v1.4.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.4.0\"\u003e1.4.0\u003c/a\u003e - 2026-05-26\u003c/h1\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOverriding the \u003cem\u003eevent_loop_policy\u003c/em\u003e fixture is deprecated. Use the \u003ccode\u003epytest_asyncio_loop_factories\u003c/code\u003e hook instead. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1419\"\u003e#1419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003epytest_asyncio_loop_factories\u003c/code\u003e hook to parametrize asyncio tests with custom event loop factories.\u003c/p\u003e\n\u003cp\u003eThe hook returns a mapping of factory names to loop factories, and \u003ccode\u003epytest.mark.asyncio(loop_factories=[...])\u003c/code\u003e selects a subset of configured factories per test. When a single factory is configured, test names are unchanged.\u003c/p\u003e\n\u003cp\u003eSynchronous \u003ccode\u003e@pytest_asyncio.fixture\u003c/code\u003e functions now see the correct event loop when custom loop factories are configured, even when test code disrupts the current event loop (e.g., via \u003ccode\u003easyncio.run()\u003c/code\u003e or \u003ccode\u003easyncio.set_event_loop(None)\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1164\"\u003e#1164\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImproved the readability of the warning message that is displayed when \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e is unset (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1298\"\u003e#1298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eOnly import \u003ccode\u003easyncio.AbstractEventLoopPolicy\u003c/code\u003e for type checking to avoid raising\na DeprecationWarning. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1394\"\u003e#1394\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdated minimum supported pytest version to v8.4.0. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1397\"\u003e#1397\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a \u003ccode\u003eResourceWarning: unclosed event loop\u003c/code\u003e warning that could occur when a synchronous test called \u003ccode\u003easyncio.run()\u003c/code\u003e or otherwise unset the current event loop after pytest-asyncio had run an async test or fixture. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dependency on \u003ccode\u003esphinx-tabs \u0026gt;= 3.5\u003c/code\u003e to organize documentation examples into tabs. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1395\"\u003e#1395\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio v1.4.0a2\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.4.0a2\"\u003e1.4.0a2\u003c/a\u003e - 2026-05-02\u003c/h1\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOverriding the \u003cem\u003eevent_loop_policy\u003c/em\u003e fixture is deprecated. Use the \u003ccode\u003epytest_asyncio_loop_factories\u003c/code\u003e hook instead. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1419\"\u003e#1419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003epytest_asyncio_loop_factories\u003c/code\u003e hook to parametrize asyncio tests with custom event loop factories.\u003c/p\u003e\n\u003cp\u003eThe hook returns a mapping of factory names to loop factories, and \u003ccode\u003epytest.mark.asyncio(loop_factories=[...])\u003c/code\u003e selects a subset of configured factories per test. When a single factory is configured, test names are unchanged on pytest 8.4+.\u003c/p\u003e\n\u003cp\u003eSynchronous \u003ccode\u003e@pytest_asyncio.fixture\u003c/code\u003e functions now see the correct event loop when custom loop factories are configured, even when test code disrupts the current event loop (e.g., via \u003ccode\u003easyncio.run()\u003c/code\u003e or \u003ccode\u003easyncio.set_event_loop(None)\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1164\"\u003e#1164\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImproved the readability of the warning message that is displayed when \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e is unset (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1298\"\u003e#1298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eOnly import \u003ccode\u003easyncio.AbstractEventLoopPolicy\u003c/code\u003e for type checking to avoid raising\na DeprecationWarning. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1394\"\u003e#1394\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/pytest-dev/pytest-asyncio/commit/6e14cd2af9292dca1fa2b027a06bbc40b0e0e425\"\u003e\u003ccode\u003e6e14cd2\u003c/code\u003e\u003c/a\u003e chore: Prepare release of v1.4.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4b900fb5d0c30949c574e55dd904ee179f858a5e\"\u003e\u003ccode\u003e4b900fb\u003c/code\u003e\u003c/a\u003e Build(deps): Bump codecov/codecov-action from 6.0.0 to 6.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ab9f63245094865c42c940a34af724b0dec1debf\"\u003e\u003ccode\u003eab9f632\u003c/code\u003e\u003c/a\u003e Build(deps): Bump zipp from 3.23.1 to 4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a56fc77ecd59f781d8471b0f6a82bf58e08c95fa\"\u003e\u003ccode\u003ea56fc77\u003c/code\u003e\u003c/a\u003e Build(deps): Bump hypothesis from 6.152.6 to 6.152.8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/e8bae9bc1f197731fc1a210c0da557af7b698e6d\"\u003e\u003ccode\u003ee8bae9b\u003c/code\u003e\u003c/a\u003e Build(deps): Bump requests from 2.34.0 to 2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/fc433402c570fd36a7a227ef4bc3abd4579299de\"\u003e\u003ccode\u003efc43340\u003c/code\u003e\u003c/a\u003e Build(deps): Bump idna from 3.14 to 3.15\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/762eaf5033b798b965c92afdbb2cebefa8fc3a8b\"\u003e\u003ccode\u003e762eaf5\u003c/code\u003e\u003c/a\u003e Build(deps): Bump jaraco-functools from 4.4.0 to 4.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/b62e2228c80070977baf6b77ba89d5c148af920f\"\u003e\u003ccode\u003eb62e222\u003c/code\u003e\u003c/a\u003e Build(deps): Bump click from 8.3.3 to 8.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/919044700627889d25ca63b6e7a3bc785f3137eb\"\u003e\u003ccode\u003e9190447\u003c/code\u003e\u003c/a\u003e Build(deps): Bump pydantic from 2.13.3 to 2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/82a393c5e31b6ebbbd8ec2a8dafc5f35b9cf1236\"\u003e\u003ccode\u003e82a393c\u003c/code\u003e\u003c/a\u003e ci: Remove unnecessary debug output.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v1.3.0...v1.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-order` from 1.3.0 to 1.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-order/releases\"\u003epytest-order's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-order 1.5.0\u003c/h2\u003e\n\u003cp\u003eAdds option \u003ccode\u003e--fail-all-on-failed-ordering\u003c/code\u003e to abort tests after a failed ordering (see \u003ca href=\"https://github.com/pytest-dev/pytest-order/blob/version-1.5/CHANGELOG.md#version-150-2026-06-13\"\u003eRelease Notes\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003epytest-order 1.4.0\u003c/h2\u003e\n\u003cp\u003eAllows the plugin to run after \u003ccode\u003e--failed-first\u003c/code\u003e and similar options.\nCheck the \u003ca href=\"https://github.com/pytest-dev/pytest-order/blob/version-1.4/CHANGELOG.md#version-140-2026-04-26\"\u003erelease notes\u003c/a\u003e for all changes.\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/pytest-dev/pytest-order/blob/main/CHANGELOG.md\"\u003epytest-order's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://pypi.org/project/pytest-order/1.5.0/\"\u003eVersion 1.5.0\u003c/a\u003e (2026-06-13)\u003c/h2\u003e\n\u003cp\u003eAdds option to abort tests after a failed ordering.\u003c/p\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadded option \u003ccode\u003e--fail-all-on-failed-ordering\u003c/code\u003e to abort the whole test run\nwithout executing any tests if some tests could not be ordered\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003etransitive relative chains are resolved as a single globally consistent order\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://pypi.org/project/pytest-order/1.4.0/\"\u003eVersion 1.4.0\u003c/a\u003e (2026-04-26)\u003c/h2\u003e\n\u003cp\u003eAllows the plugin to run after \u003ccode\u003e--failed-first\u003c/code\u003e and similar options.\u003c/p\u003e\n\u003ch3\u003eChanges\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremoved official support for Python 3.7-3.9 (EOL), added Python 3.13 and 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadded option \u003ccode\u003e--order-after-ff\u003c/code\u003e, that allows to run \u003ccode\u003epytest-order\u003c/code\u003e after built-in hooks\nlike the \u003ccode\u003e--failed-first\u003c/code\u003e option  (see \u003ca href=\"https://redirect.github.com/pytest-dev/pytest-order/issues/234\"\u003e#234\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInfrastructure\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euse trusted publisher for release (see \u003ca href=\"https://docs.pypi.org/trusted-publishers/\"\u003ehttps://docs.pypi.org/trusted-publishers/\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euse \u003ccode\u003epyproject.toml\u003c/code\u003e for project setup\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euse a theme for documentation supporting dark mode\u003c/li\u003e\n\u003cli\u003eadded use case for ordering test modules (see \u003ca href=\"https://redirect.github.com/pytest-dev/pytest-order/issues/51\"\u003e#51\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efixed documentation for \u003ccode\u003e--indulgent-ordering\u003c/code\u003e option\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/725547ff472b2db7362cef277eea2e86aa7041f8\"\u003e\u003ccode\u003e725547f\u003c/code\u003e\u003c/a\u003e Release 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/43e076997b52f009288baafed7c390104b68743b\"\u003e\u003ccode\u003e43e0769\u003c/code\u003e\u003c/a\u003e Implement --fail-all-on-failed-ordering (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-order/issues/246\"\u003e#246\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/c411fc8d3daaf85a1c3de678f28b895de919ab69\"\u003e\u003ccode\u003ec411fc8\u003c/code\u003e\u003c/a\u003e Fix relative ordering in complex transitive cases (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-order/issues/242\"\u003e#242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/5a6726987e7ce56fb8bb6d46bb91469177576fd5\"\u003e\u003ccode\u003e5a67269\u003c/code\u003e\u003c/a\u003e Bump codecov/codecov-action from 6 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/ce06e5ddee44eb72ddb30ae7185b2592644053a6\"\u003e\u003ccode\u003ece06e5d\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/14488047df88b380efa6031dc806f2c46cba3c00\"\u003e\u003ccode\u003e1448804\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/e8c9af00150c14c36d74b8baa8d9b9e5a8c22795\"\u003e\u003ccode\u003ee8c9af0\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/4b028bc0c434369c09b6b78cc14a6647dec1585a\"\u003e\u003ccode\u003e4b028bc\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/5d57cd7656ab0f04a9076e6fb689fd4cbab894f3\"\u003e\u003ccode\u003e5d57cd7\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/3ec2e30f39fe67f53356c656270315f9e414820e\"\u003e\u003ccode\u003e3ec2e30\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-order/compare/v1.3.0...v1.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `aiohttp` from 3.14.4 to 3.14.5\nUpdates `aiokafka` from 0.12.0 to 0.14.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/aio-libs/aiokafka/releases\"\u003eaiokafka's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.14.0\u003c/h2\u003e\n\u003cp\u003eNew features:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd rack-aware fetching from the closest in-sync replica (KIP-392) via the new\n\u003ccode\u003eclient_rack\u003c/code\u003e option on :class:\u003ccode\u003eAIOKafkaConsumer\u003c/code\u003e. When set and the brokers\nsupport \u003ccode\u003eFetchRequest v11\u003c/code\u003e (Kafka 2.4+) with a \u003ccode\u003ereplica.selector.class\u003c/code\u003e\nconfigured, the consumer will fetch from a same-rack follower instead of the\npartition leader, reducing cross-AZ traffic and tail latency.\n(prs \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1159\"\u003e#1159\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1160\"\u003e#1160\u003c/a\u003e by \u003ca href=\"https://github.com/GlebShipilov\"\u003e\u003ccode\u003e@​GlebShipilov\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBugfixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix type annotation for \u003ccode\u003eAIOKafkaAdminClient\u003c/code\u003e (issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1148\"\u003e#1148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn back and deprecate \u003ccode\u003eapi_version\u003c/code\u003e parameter in client classes\n(issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1147\"\u003e#1147\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid failures when a transaction coordinator is dead by removing deprecated code\n(issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1151\"\u003e#1151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProperly manage batch max size and linger_ms. A batch will be always\nproduced if the max size or the lingering time is reached\n(pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1142\"\u003e#1142\u003c/a\u003e by \u003ca href=\"https://github.com/vmaurin\"\u003e\u003ccode\u003e@​vmaurin\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.14.0b1\u003c/h2\u003e\n\u003cp\u003eNew features:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd rack-aware fetching from the closest in-sync replica (KIP-392) via the new\n\u003ccode\u003eclient_rack\u003c/code\u003e option on :class:\u003ccode\u003eAIOKafkaConsumer\u003c/code\u003e. When set and the brokers\nsupport \u003ccode\u003eFetchRequest v11\u003c/code\u003e (Kafka 2.4+) with a \u003ccode\u003ereplica.selector.class\u003c/code\u003e\nconfigured, the consumer will fetch from a same-rack follower instead of the\npartition leader, reducing cross-AZ traffic and tail latency.\n(prs \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1159\"\u003e#1159\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1160\"\u003e#1160\u003c/a\u003e by \u003ca href=\"https://github.com/GlebShipilov\"\u003e\u003ccode\u003e@​GlebShipilov\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBugfixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix type annotation for \u003ccode\u003eAIOKafkaAdminClient\u003c/code\u003e (issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1148\"\u003e#1148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn back and deprecate \u003ccode\u003eapi_version\u003c/code\u003e parameter in client classes\n(issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1147\"\u003e#1147\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid failures when a transaction coordinator is dead by removing deprecated code\n(issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1151\"\u003e#1151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProperly manage batch max size and linger_ms. A batch will be always\nproduced if the max size or the lingering time is reached\n(pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1142\"\u003e#1142\u003c/a\u003e by \u003ca href=\"https://github.com/vmaurin\"\u003e\u003ccode\u003e@​vmaurin\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.13.0\u003c/h2\u003e\n\u003cp\u003eBreaking changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eResolve API versions at connection with brokers\n\u003ccode\u003eapi_version\u003c/code\u003e parameter has been removed from the different clients (admin/consumer/producer)\n(pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1136\"\u003e#1136\u003c/a\u003e by \u003ca href=\"https://github.com/vmaurin\"\u003e\u003ccode\u003e@​vmaurin\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eImproved Documentation:\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/aio-libs/aiokafka/blob/master/CHANGES.rst\"\u003eaiokafka's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e0.14.0 (2026-04-29)\u003c/h1\u003e\n\u003cp\u003eNew features:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd rack-aware fetching from the closest in-sync replica (KIP-392) via the new\n\u003ccode\u003eclient_rack\u003c/code\u003e option on :class:\u003ccode\u003eAIOKafkaConsumer\u003c/code\u003e. When set and the brokers\nsupport \u003ccode\u003eFetchRequest v11\u003c/code\u003e (Kafka 2.4+) with a \u003ccode\u003ereplica.selector.class\u003c/code\u003e\nconfigured, the consumer will fetch from a same-rack follower instead of the\npartition leader, reducing cross-AZ traffic and tail latency.\n(prs \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1159\"\u003e#1159\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1160\"\u003e#1160\u003c/a\u003e by \u003ca href=\"https://github.com/GlebShipilov\"\u003e\u003ccode\u003e@​GlebShipilov\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBugfixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix type annotation for \u003ccode\u003eAIOKafkaAdminClient\u003c/code\u003e (issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1148\"\u003e#1148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn back and deprecate \u003ccode\u003eapi_version\u003c/code\u003e parameter in client classes\n(issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1147\"\u003e#1147\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid failures when a transaction coordinator is dead by removing deprecated code\n(issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1151\"\u003e#1151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProperly manage batch max size and linger_ms. A batch will be always\nproduced if the max size or the lingering time is reached\n(pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1142\"\u003e#1142\u003c/a\u003e by \u003ca href=\"https://github.com/vmaurin\"\u003e\u003ccode\u003e@​vmaurin\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.13.0 (2026-01-02)\u003c/h1\u003e\n\u003cp\u003eBreaking changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eResolve API versions at connection with brokers\n\u003ccode\u003eapi_version\u003c/code\u003e parameter has been removed from the different clients (admin/consumer/producer)\n(pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1136\"\u003e#1136\u003c/a\u003e by \u003ca href=\"https://github.com/vmaurin\"\u003e\u003ccode\u003e@​vmaurin\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eImproved Documentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix incomplete documentation for \u003ccode\u003eAIOKafkaConsumer.offset_for_times\u003c/code\u003e\n(pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1068\"\u003e#1068\u003c/a\u003e by \u003ca href=\"https://github.com/jzvandenoever\"\u003e\u003ccode\u003e@​jzvandenoever\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Java Client API reference (pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1069\"\u003e#1069\u003c/a\u003e by \u003ca href=\"https://github.com/emmanuel-ferdman\"\u003e\u003ccode\u003e@​emmanuel-ferdman\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBugfixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake KafkaStorageError retriable after metadata refresh like in other\nimplementations (pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1115\"\u003e#1115\u003c/a\u003e by \u003ca href=\"https://github.com/omerhadari\"\u003e\u003ccode\u003e@​omerhadari\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure the transaction coordinator is refreshed after broker fail‑over,\nso transactional producers resume once a new coordinator is elected.\n(pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1135\"\u003e#1135\u003c/a\u003e by \u003ca href=\"https://github.com/vmaurin\"\u003e\u003ccode\u003e@​vmaurin\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRename the RequestHeader version classes to match official version\nschemas (pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1141\"\u003e#1141\u003c/a\u003e by \u003ca href=\"https://github.com/vmaurin\"\u003e\u003ccode\u003e@​vmaurin\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/aio-libs/aiokafka/commit/672947afe85c91b7d953f0259e69837a711d3246\"\u003e\u003ccode\u003e672947a\u003c/code\u003e\u003c/a\u003e Prepare 0.14.0 final release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/de7ec7e3ee9620046be994f062d690b09136d01b\"\u003e\u003ccode\u003ede7ec7e\u003c/code\u003e\u003c/a\u003e Prepare 0.14.0b1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/7d331e0fe948a022cddeb6f1ea2da94fbeaa39a2\"\u003e\u003ccode\u003e7d331e0\u003c/code\u003e\u003c/a\u003e Fix last_stable_offset parsing for FetchResponse v5..v10 (\u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1160\"\u003e#1160\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/00b099f0caa9009f9774c1c1869bbdf38de6d4bd\"\u003e\u003ccode\u003e00b099f\u003c/code\u003e\u003c/a\u003e Improve test_kip_345_disabled to debug flakiness\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/57fa87056f09f344d23a190513d7a7f2c599fc9a\"\u003e\u003ccode\u003e57fa870\u003c/code\u003e\u003c/a\u003e Client rack support (\u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1159\"\u003e#1159\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/870a52fda23fad79a92b5917239a9a33fcc72006\"\u003e\u003ccode\u003e870a52f\u003c/code\u003e\u003c/a\u003e Use linger_ms to delay batches (\u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1142\"\u003e#1142\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/cadc5e02d51440dc5dc89a597a17ee64bc0c0837\"\u003e\u003ccode\u003ecadc5e0\u003c/code\u003e\u003c/a\u003e Issue 1151 cleanup (\u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1153\"\u003e#1153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/19b28fed72e422fac72fcedc8db9d224b8c67ae2\"\u003e\u003ccode\u003e19b28fe\u003c/code\u003e\u003c/a\u003e Return and deprecate api_version (fixes \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1147\"\u003e#1147\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1150\"\u003e#1150\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/52d440fb5a93a4dd2e0738715ed39c34d97d23e9\"\u003e\u003ccode\u003e52d440f\u003c/code\u003e\u003c/a\u003e Fix AIOKafkaAdminClient annotation (\u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1148\"\u003e#1148\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1149\"\u003e#1149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/3b7ccd0fff5c92a9cf12c12e361370082ad12b0c\"\u003e\u003ccode\u003e3b7ccd0\u003c/code\u003e\u003c/a\u003e Prepare 0.13.0 release\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/aio-libs/aiokafka/compare/v0.12.0...v0.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `aiolimiter` from 1.2.1 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/mjpieters/aiolimiter/releases\"\u003eaiolimiter's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eAiolimiter 1.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTightened boundary checks for the \u003ccode\u003eamount\u003c/code\u003e argument to \u003ccode\u003eAsyncLimiter.acquire()\u003c/code\u003e, rejecting values outside the 0 to \u003ccode\u003emax_rate\u003c/code\u003e range. Negative values and \u003ccode\u003eNaN\u003c/code\u003e are no longer accepted. (\u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/760\"\u003e#760\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/313\"\u003e#313\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/655\"\u003e#655\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/mjpieters/aiolimiter/blob/main/CHANGELOG.md\"\u003eaiolimiter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eaiolimiter 1.3.0 (2026-09-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTightened boundary checks for the \u003ccode\u003eamount\u003c/code\u003e argument to \u003ccode\u003eAsyncLimiter.acquire()\u003c/code\u003e, rejecting values outside the 0 to \u003ccode\u003emax_rate\u003c/code\u003e range. Negative values and \u003ccode\u003eNaN\u003c/code\u003e are no longer accepted. (\u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/760\"\u003e#760\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/313\"\u003e#313\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/655\"\u003e#655\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/mjpieters/aiolimiter/commit/f7df2d7ff4be2d2b64bb2cbf2340e5a8a28d988d\"\u003e\u003ccode\u003ef7df2d7\u003c/code\u003e\u003c/a\u003e ci: Address release process issues\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/be2530b0352d2382b71e6490b948356904543952\"\u003e\u003ccode\u003ebe2530b\u003c/code\u003e\u003c/a\u003e chore: fix sdist packaging\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/252b97ff8819e1ea3ffb79c676286feb0970c79e\"\u003e\u003ccode\u003e252b97f\u003c/code\u003e\u003c/a\u003e ci: unbreak prek step during releases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/ee7f6efcd0ef8c15282e66bddda9871331585807\"\u003e\u003ccode\u003eee7f6ef\u003c/code\u003e\u003c/a\u003e Release v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/697643f8b768c63ade9777004b130d5203329297\"\u003e\u003ccode\u003e697643f\u003c/code\u003e\u003c/a\u003e feat: Reject negative and NaN acquisition amounts (\u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/760\"\u003e#760\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/8438f6f458e2e00f9d3313f707af9c7abe2deb8f\"\u003e\u003ccode\u003e8438f6f\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/8ed24d146a52a961303db8b5c13691f0b4eaf212\"\u003e\u003ccode\u003e8ed24d1\u003c/code\u003e\u003c/a\u003e chore(deps): update pre-commit hook renovatebot/pre-commit-hooks to v44.65.5 ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/4c57d27f05d92f66ea4e961ff661d525db46e6b4\"\u003e\u003ccode\u003e4c57d27\u003c/code\u003e\u003c/a\u003e chore(deps): update pre-commit updates (\u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/759\"\u003e#759\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/6c2f96d316db42b20e0ccc7a9bf537e575cfee7e\"\u003e\u003ccode\u003e6c2f96d\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency towncrier to v26\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/279fdb7780226444c2dd0f71807d45ffcd86a82d\"\u003e\u003ccode\u003e279fdb7\u003c/code\u003e\u003c/a\u003e chore(deps): update pre-commit updates (\u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/757\"\u003e#757\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mjpieters/aiolimiter/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 `azure-storage-blob` from 12.28.0 to 12.31.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Azure/azure-sdk-for-python/releases\"\u003eazure-storage-blob's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eazure-storage-blob_12.31.0\u003c/h2\u003e\n\u003ch2\u003e12.31.0 (2026-09-30)\u003c/h2\u003e\n\u003cp\u003eThis version and all future versions will require Python 3.10+. Python 3.9 is no longer supported.\u003c/p\u003e\n\u003ch3\u003eFeatures Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStable release of features from 12.31.0b1\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003elist\u003c/code\u003e support to \u003ccode\u003eBlobSasPermissions\u003c/code\u003e for use with directory-scoped SAS tokens.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBugs Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where \u003ccode\u003edestination_snapshot\u003c/code\u003e on a blob's copy properties was always \u003ccode\u003eNone\u003c/code\u003e when listing blobs with \u003ccode\u003eresponse_format=\u0026quot;arrow\u0026quot;\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/Azure/azure-sdk-for-python/commit/0be331280690003e4527b5ee68730be23fa563f0\"\u003e\u003ccode\u003e0be3312\u003c/code\u003e\u003c/a\u003e 2026-09-29 -\u0026gt; 2026-09-30 changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/9c0768f332fcd7c83813defe9dd00ceec938086b\"\u003e\u003ccode\u003e9c0768f\u003c/code\u003e\u003c/a\u003e [Storage] Prep for STG104 GA Release (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49263\"\u003e#49263\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/a124f0e97510ff14639ad0413ec9c0f4d7ff5641\"\u003e\u003ccode\u003ea124f0e\u003c/code\u003e\u003c/a\u003e [Storage] Add 12.30.3 bug fix to release branch (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49140\"\u003e#49140\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/329cc23c9c8022c25ad511a6b7b26d0baf9544dd\"\u003e\u003ccode\u003e329cc23\u003c/code\u003e\u003c/a\u003e reject headers with \\r or \\n (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49070\"\u003e#49070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/7e753be3785598a125b29d4323ab23e6e6c25461\"\u003e\u003ccode\u003e7e753be\u003c/code\u003e\u003c/a\u003e [Storage] Prepare STG 104 GA release (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48791\"\u003e#48791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/9733992e6b9f59e40e7fcd5ce857e9478e222686\"\u003e\u003ccode\u003e9733992\u003c/code\u003e\u003c/a\u003e [Storage] Update main CHANGELOG after patch (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48783\"\u003e#48783\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/bdef02fe0231c418cfd25e04a9e97a213def8b62\"\u003e\u003ccode\u003ebdef02f\u003c/code\u003e\u003c/a\u003e added headers to redirect cleanup logic (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48771\"\u003e#48771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/f020094e6329f96bffab1b07d96fd5a74eb324b1\"\u003e\u003ccode\u003ef020094\u003c/code\u003e\u003c/a\u003e [Storage] Mark rehydrate to smart tier tests as playback (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48712\"\u003e#48712\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/65d40b853d5bbae84dbdfb718ce03cf47f8e6fa7\"\u003e\u003ccode\u003e65d40b8\u003c/code\u003e\u003c/a\u003e fixed sample error (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48687\"\u003e#48687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/8c46d454d40637fe95a8d1ba829be901fbfd13af\"\u003e\u003ccode\u003e8c46d45\u003c/code\u003e\u003c/a\u003e [Storage] Detect region reorder during Blob decryption (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48559\"\u003e#48559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Azure/azure-sdk-for-python/compare/azure-storage-blob_12.28.0...azure-storage-blob_12.31.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `azure-storage-file-share` from 12.19.0 to 12.27.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Azure/azure-sdk-for-python/releases\"\u003eazure-storage-file-share's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eazure-storage-file-share_12.27.0\u003c/h2\u003e\n\u003ch2\u003e12.27.0 (2026-09-30)\u003c/h2\u003e\n\u003cp\u003eThis version and all future versions will require Python 3.10+. Python 3.9 is no longer supported.\u003c/p\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCustom transports that use legacy \u003ccode\u003eazure-core\u003c/code\u003e Request/Response types will no longer be supported and may now cause errors if used. Please ensure custom transports are utilizing types from \u003ccode\u003eazure.core.rest\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStable release of features from 12.27.0b1\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/0be331280690003e4527b5ee68730be23fa563f0\"\u003e\u003ccode\u003e0be3312\u003c/code\u003e\u003c/a\u003e 2026-09-29 -\u0026gt; 2026-09-30 changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/9c0768f332fcd7c83813defe9dd00ceec938086b\"\u003e\u003ccode\u003e9c0768f\u003c/code\u003e\u003c/a\u003e [Storage] Prep for STG104 GA Release (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49263\"\u003e#49263\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/a124f0e97510ff14639ad0413ec9c0f4d7ff5641\"\u003e\u003ccode\u003ea124f0e\u003c/code\u003e\u003c/a\u003e [Storage] Add 12.30.3 bug fix to release branch (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49140\"\u003e#49140\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/329cc23c9c8022c25ad511a6b7b26d0baf9544dd\"\u003e\u003ccode\u003e329cc23\u003c/code\u003e\u003c/a\u003e reject headers with \\r or \\n (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49070\"\u003e#49070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/7e753be3785598a125b29d4323ab23e6e6c25461\"\u003e\u003ccode\u003e7e753be\u003c/code\u003e\u003c/a\u003e [Storage] Prepare STG 104 GA release (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48791\"\u003e#48791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/62b78439ea790c1089a618045cec2146b6bbbb88\"\u003e\u003ccode\u003e62b7843\u003c/code\u003e\u003c/a\u003e [AutoPR azure-mgmt-enclave]-generated-from-SDK Generation - Python-6751861 (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/9733992e6b9f59e40e7fcd5ce857e9478e222686\"\u003e\u003ccode\u003e9733992\u003c/code\u003e\u003c/a\u003e [Storage] Update main CHANGELOG after patch (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48783\"\u003e#48783\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/1403053ba3a57f776d53e759728c7eb64413d872\"\u003e\u003ccode\u003e1403053\u003c/code\u003e\u003c/a\u003e Update AgentServer SDK for optional logprobs (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48778\"\u003e#48778\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/bdef02fe0231c418cfd25e04a9e97a213def8b62\"\u003e\u003ccode\u003ebdef02f\u003c/code\u003e\u003c/a\u003e added headers to redirect cleanup logic (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48771\"\u003e#48771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/2063e16013c308e8e4edc4ca66c2ba6487a053a7\"\u003e\u003ccode\u003e2063e16\u003c/code\u003e\u003c/a\u003e [AutoPR azure-mgmt-netapp]-generated-from-SDK Generation - Python-6747361 (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/4\"\u003e#4\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Azure/azure-sdk-for-python/compare/azure-storage-file-share_12.19.0...azure-storage-file-share_12.27.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `box-sdk-gen` from 1.12.0 to 1.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/box/box-python-sdk-gen/releases\"\u003ebox-sdk-gen's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.17.0\u003c/h2\u003e\n\u003ch3\u003eNew Features and Enhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd missing webhook events (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/554\"\u003e#554\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/708\"\u003e#708\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/3d2554239b0bede7a3158cf88913592643c3e22b\"\u003e3d25542\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport event with long polling (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/757\"\u003e#757\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/673\"\u003e#673\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/481fbeb1412ecc137c0090dd4b37fe9ad75db6b0\"\u003e481fbeb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.16.0\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify events \u003ccode\u003enext_stream_position\u003c/code\u003e property type as \u003ccode\u003eint\u003c/code\u003e (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/535\"\u003e#535\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/644\"\u003e#644\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/64069db8da33988c173380defd6be065daa02496\"\u003e64069db\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features and Enhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd AI spreadsheet processor (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/533\"\u003e#533\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/630\"\u003e#630\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/66357578218913240bc923cb0dc771157ec95f54\"\u003e6635757\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Archive Public API (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/540\"\u003e#540\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/651\"\u003e#651\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/c36d1dbff42c89876c037983c792c5c7282459cc\"\u003ec36d1db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new Hubs APIs and Hubs items API (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/538\"\u003e#538\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/645\"\u003e#645\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/1daa3e8814403c78ed2a1d64187b8e4c379028fe\"\u003e1daa3e8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new property for network exception retry strategy (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/763\"\u003e#763\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/650\"\u003e#650\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/13f9593dbc4a45d094ee5709d602188ef341a1a5\"\u003e13f9593\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new schema for \u003ccode\u003eMetadata Error\u003c/code\u003e (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/539\"\u003e#539\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/646\"\u003e#646\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/49d7f349e1be4e23939ef10db1edfc6042b98175\"\u003e49d7f34\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAllow injecting private key decryption mechanism for JWT (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/754\"\u003e#754\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/636\"\u003e#636\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/4ea0af5f8f5b5516a7c23d7912c34690c017db29\"\u003e4ea0af5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove webhook validation checks (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/745\"\u003e#745\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/628\"\u003e#628\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/f0ece639d761c765b3bc59fbe3ba8582af755178\"\u003ef0ece63\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Hubs beta endpoints (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/531\"\u003e#531\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/622\"\u003e#622\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/b5e95fe5b219d067028aa395170718eca0d62189\"\u003eb5e95fe\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport new tools in AI Studio (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/534\"\u003e#534\u003c/a\u003e)  (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/633\"\u003e#633\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/ac76eb2d7c5560b30c4cec171dd90b0a0ece4ab5\"\u003eac76eb2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.15.0\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCompute webhook signature with and without escaping the body (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/737\"\u003e#737\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/607\"\u003e#607\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/e5118b8a257a042510374d91bd62a1f98c662fef\"\u003ee5118b8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix downscope token to use \u003ccode\u003eretrieveToken\u003c/code\u003e method for token retrieval (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/731\"\u003e#731\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/e4926851edccd4ee7e66157050cedd0d01cec5ea\"\u003ee492685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix slash escaping when calculating webhook signature (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/736\"\u003e#736\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/430b1754ec840582e28a277c6c8d369cbe7ebdf5\"\u003e430b175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse constant-time comparison for HMAC signatures (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/739\"\u003e#739\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/610\"\u003e#610\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/6f6660c8f3aa2b7b75b0fcd4ed015d8d761cd77f\"\u003e6f6660c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features and Enhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd AI agents warnings; allow for more types of metadata value (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/520\"\u003e#520\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/567\"\u003e#567\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/86aa1ccadac9acead7bceeafb50e45f38eb2d9cc\"\u003e86aa1cc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Shield Lists APIs (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/528\"\u003e#528\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/f980f6544a58a5c64ab0b3ec13b2771b81ea25ed\"\u003ef980f65\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support of IBM models to AI API (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/522\"\u003e#522\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/568\"\u003e#568\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/767547ae070909852800c447e65cbcc95b97c5a3\"\u003e767547a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate legal holds and AI models (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/526\"\u003e#526\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/599\"\u003e#599\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/d56228d81bd9777af5431ccc9d05233e13a0c2ed\"\u003ed56228d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.14.0\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eset default timeouts for requests (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/707\"\u003e#707\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/552\"\u003e#552\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/66b87c8986ce2f5fdb3a9eac995ef8a9643bcd76\"\u003e66b87c8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features and Enhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd security settings properties on sign template schema (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/518\"\u003e#518\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/543\"\u003e#543\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/0a45d218d1aa3fa62da7b5c8c01506fb657c0b36\"\u003e0a45d21\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport sensitive data sanitization in errors (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/695\"\u003e#695\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/533\"\u003e#533\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/abb7b1d16a192edd99ff1fc4fb7c4caf79ee5f10\"\u003eabb7b1d\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/box/box-python-sdk-gen/blob/main/CHANGELOG.md\"\u003ebox-sdk-gen's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/compare/v1.16.0...v1.17.0\"\u003e1.17.0\u003c/a\u003e (2025-09-05)\u003c/h2\u003e\n\u003ch3\u003eNew Features and Enhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd missing webhook events (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/554\"\u003e#554\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/708\"\u003e#708\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/3d2554239b0bede7a3158cf88913592643c3e22b\"\u003e3d25542\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport event with long polling (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/757\"\u003e#757\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/673\"\u003e#673\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/481fbeb1412ecc137c0090dd4b37fe9ad75db6b0\"\u003e481fbeb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/compare/v1.15.0...v1.16.0\"\u003e1.16.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify events \u003ccode\u003enext_stream_position\u003c/code\u003e property type as \u003ccode\u003eint\u003c/code\u003e (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/535\"\u003e#535\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/644\"\u003e#644\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/64069db8da33988c173380defd6be065daa02496\"\u003e64069db\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features and Enhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd AI spreadsheet processor (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/533\"\u003e#533\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/630\"\u003e#630\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/66357578218913240bc923cb0dc771157ec95f54\"\u003e6635757\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Archive Public API (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/540\"\u003e#540\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/651\"\u003e#651\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/c36d1dbff42c89876c037983c792c5c7282459cc\"\u003ec36d1db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new Hubs APIs and Hubs items API (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/538\"\u003e#538\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/645\"\u003e#645\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/1daa3e8814403c78ed2a1d64187b8e4c379028fe\"\u003e1daa3e8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new property for network exception retry strategy (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/763\"\u003e#763\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/650\"\u003e#650\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/13f9593dbc4a45d094ee5709d602188ef341a1a5\"\u003e13f9593\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new schema for \u003ccode\u003eMetadata Error\u003c/code\u003e (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/539\"\u003e#539\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/646\"\u003e#646\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/49d7f349e1be4e23939ef10db1edfc6042b98175\"\u003e49d7f34\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAllow injecting private key decryption mechanism for JWT (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/754\"\u003e#754\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/636\"\u003e#636\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/4ea0af5f8f5b5516a7c23d7912c34690c017db29\"\u003e4ea0af5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove webhook validation checks (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/745\"\u003e#745\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/628\"\u003e#628\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/f0ece639d761c765b3bc59fbe3ba8582af755178\"\u003ef0ece63\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Hubs beta endpoints (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/531\"\u003e#531\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/622\"\u003e#622\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/b5e95fe5b219d067028aa395170718eca0d62189\"\u003eb5e95fe\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport new tools in AI Studio (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/534\"\u003e#534\u003c/a\u003e)  (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/633\"\u003e#633\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/ac76eb2d7c5560b30c4cec171dd90b0a0ece4ab5\"\u003eac76eb2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/compare/v1.14.0...v1.15.0\"\u003e1.15.0\u003c/a\u003e (2025-06-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCompute webhook signature with and without escaping the body (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/737\"\u003e#737\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/607\"\u003e#607\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/e5118b8a257a042510374d91bd62a1f98c662fef\"\u003ee5118b8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix downscope token to use \u003ccode\u003eretrieveToken\u003c/code\u003e method for token retrieval (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/731\"\u003e#731\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/e4926851edccd4ee7e66157050cedd0d01cec5ea\"\u003ee492685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix slash escaping when calculating webhook signature (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/736\"\u003e#736\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/430b1754ec840582e28a277c6c8d369cbe7ebdf5\"\u003e430b175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse constant-time comparison for HMAC signatures (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/739\"\u003e#739\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/610\"\u003e#610\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/6f6660c8f3aa2b7b75b0fcd4ed015d8d761cd77f\"\u003e6f6660c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features and Enhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd AI agents warnings; allow for more types of metadata value (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/520\"\u003e#520\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/567\"\u003e#567\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/86aa1ccadac9acead7bceeafb50e45f38eb2d9cc\"\u003e86aa1cc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Shield Lists APIs (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/528\"\u003e#528\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/f980f6544a58a5c64ab0b3ec13b2771b81ea25ed\"\u003ef980f65\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support of IBM models to AI API (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/522\"\u003e#522\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/568\"\u003e#568\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/767547ae070909852800c447e65cbcc95b97c5a3\"\u003e767547a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate legal holds and AI models (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/526\"\u003e#526\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/599\"\u003e#599\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/d56228d81bd9777af5431ccc9d05233e13a0c2ed\"\u003ed56228d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/compare/v1.13.0...v1.14.0\"\u003e1.14.0\u003c/a\u003e (2025-05-02)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\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/box/box-python-sdk-gen/commit/e8cd5ae10505a9d6bd1dcd0e2ce26d9936fd0612\"\u003e\u003ccode\u003ee8cd5ae\u003c/code\u003e\u003c/a\u003e chore: release version 1.17.0 (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/709\"\u003e#709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/3d2554239b0bede7a3158cf88913592643c3e22b\"\u003e\u003ccode\u003e3d25542\u003c/code\u003e\u003c/a\u003e\u003ccode\u003ebox/box-openapi#554\u003c/code\u003e\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/708\"\u003e#708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/7297f7c5ec2980fe96e9e53d293b4a771dfbfa9a\"\u003e\u003ccode\u003e7297f7c\u003c/code\u003e\u003c/a\u003e\u003ccode\u003ebox/box-openapi#553\u003c/code\u003e\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/707\"\u003e#707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/462e43d3190c26f512d6ede8a908df01566c7fb5\"\u003e\u003ccode\u003e462e43d\u003c/code\u003e\u003c/a\u003e chore: Update \u003ccode\u003e.codegen.json\u003c/code\u003e with commit hash of \u003ccode\u003ecodegen\u003c/code\u003e and \u003ccode\u003eopenapi\u003c/code\u003e spe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/e64c6e937b7cf81e2e1c9ce327eff0d81003c502\"\u003e\u003ccode\u003ee64c6e9\u003c/code\u003e\u003c/a\u003e\u003ccode\u003ebox/box-codegen#812\u003c/code\u003e\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/695\"\u003e#695\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/ce5f5a97d26da3b89b366ed0942c2f15db43167b\"\u003e\u003ccode\u003ece5f5a9\u003c/code\u003e\u003c/a\u003e chore: Update \u003ccode\u003e.codegen.json\u003c/code\u003e with commit hash of \u003ccode\u003ecodegen\u003c/code\u003e and \u003ccode\u003eopenapi\u003c/code\u003e spe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/ffde961738ffef48f4c19433168e5fea6cc014c7\"\u003e\u003ccode\u003effde961\u003c/code\u003e\u003c/a\u003e chore: Update \u003ccode\u003e.codegen.json\u003c/code\u003e with commit hash of \u003ccode\u003ecodegen\u003c/code\u003e and \u003ccode\u003eopenapi\u003c/code\u003e spe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/290cfe9509b6f62123ce565bb50cdd980bc113fd\"\u003e\u003ccode\u003e290cfe9\u003c/code\u003e\u003c/a\u003e chore: Update \u003ccode\u003e.codegen.json\u003c/code\u003e with commit hash of \u003ccode\u003ecodegen\u003c/code\u003e and \u003ccode\u003eopenapi\u003c/code\u003e spe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/f94e9e8134353627ecc8f2cd0eea697834812dec\"\u003e\u003ccode\u003ef94e9e8\u003c/code\u003e\u003c/a\u003e chore: Update .codegen.json with commit hash of codegen and openapi spec (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/390f1aec06d01305eb95ae8b511e7b5a1fb717cd\"\u003e\u003ccode\u003e390f1ae\u003c/code\u003e\u003c/a\u003e chore: Update .codegen.json with commit hash of codegen and openapi spec (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/box/box-python-sdk-gen/compare/v1.12.0...v1.17.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `celery` from 5.4.0 to 5.6.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/celery/celery/releases\"\u003ecelery's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev5.6.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix Django worker recursion bug + defensive checks for pool_cls.\u003cstrong\u003emodule\u003c/strong\u003e by \u003ca href=\"https://github.com/maycuatroi1\"\u003e\u003ccode\u003e@​maycuatroi1\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/celery/celery/pull/10048\"\u003ecelery/celery#10048\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Update user_preload_options example to use click. by \u003ca href=\"https://github.com/jorsyk\"\u003e\u003ccode\u003e@​jorsyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/celery/celery/pull/10056\"\u003ecelery/celery#10056\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix invalid configuration key \u0026quot;bootstrap_servers\u0026quot; in Kafka demo by \u003ca href=\"https://github.com/jorsyk\"\u003e\u003ccode\u003e@​jorsyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/celery/celery/pull/10060\"\u003ecelery/celery#10060\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix broken images on PyPI page by \u003ca href=\"https://github.com/Timour-Ilyas\"\u003e\u003ccode\u003e@​Timour-Ilyas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/celery/celery/pull/10066\"\u003ecelery/celery#10066\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove broken reference. by \u003ca href=\"https://github....\n\n_Description has been truncated_","html_url":"https://github.com/pipeshub-ai/pipeshub-ai/pull/4684","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/pipeshub-ai%2Fpipeshub-ai/issues/4684","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4684/packages"},{"uuid":"6021528320","node_id":"PR_kwDOVWgsac8AAAABKinsSg","number":12,"state":"open","title":"build(deps): Update pydantic requirement from \u003c3,\u003e=2.12.0 to \u003e=2.14.1,\u003c3 in /backend","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-10-25T06:18:35.000Z","updated_at":"2026-10-25T06:18:39.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): Update","packages":[{"name":"pydantic","old_version":"\u003c3,\u003e=2.12.0","new_version":"\u003e=2.14.1,\u003c3","repository_url":"https://github.com/pydantic/pydantic"}],"path":"/backend","ecosystem":"pip"},"body":"Updates the requirements on [pydantic](https://github.com/pydantic/pydantic) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.0...v2.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 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/TashfikS/prompt-vault-mcp/pull/12","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/TashfikS%2Fprompt-vault-mcp/issues/12","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/12/packages"},{"uuid":"6021441340","node_id":"PR_kwDORn3EFc8AAAABKijcUg","number":10,"state":"open","title":"deps(backend): bump the minor-and-patch group across 1 directory with 7 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-25T06:04:00.000Z","updated_at":"2026-10-25T06:04:03.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(backend): bump","group_name":"minor-and-patch","update_count":7,"packages":[{"name":"fastapi","old_version":"0.136.1","new_version":"0.159.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.54.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pydantic","old_version":"2.13.4","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.14.1","new_version":"2.16.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"python-multipart","old_version":"0.0.29","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"croniter","old_version":"6.2.2","new_version":"6.2.4","repository_url":"https://github.com/pallets-eco/croniter"}],"path":null,"ecosystem":"pip"},"body":"Bumps the minor-and-patch group with 7 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.159.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.54.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.4` | `2.14.1` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.1` | `2.16.1` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.29` | `0.0.32` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [croniter](https://github.com/pallets-eco/croniter) | `6.2.2` | `6.2.4` |\n\n\nUpdates `fastapi` from 0.136.1 to 0.159.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.159.1\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16586\"\u003e#16586\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.159.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16584\"\u003e#16584\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.158.2\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16582\"\u003e#16582\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.158.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Preserve form media types in OpenAPI. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16579\"\u003e#16579\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.158.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16577\"\u003e#16577\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.157.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16573\"\u003e#16573\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📝 Clarify boolean query parameter parsing. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16569\"\u003e#16569\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Clarify nullable query parameters and path parameter defaults. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16568\"\u003e#16568\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👷 Remove translation notifications and approval labeling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16570\"\u003e#16570\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.156.8\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Preserve uploaded file positions when converting to \u003ccode\u003ebytes\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16566\"\u003e#16566\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.156.7\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix validation error locations for form and file \u003ccode\u003eAliasChoices\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16564\"\u003e#16564\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.156.6\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/fastapi/fastapi/commit/4bdfbe4513084b19e22421ce1f916d8c1ac462a0\"\u003e\u003ccode\u003e4bdfbe4\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.159.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16588\"\u003e#16588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b169d23e7d65c99ce83e1cf5c6e76f3f585c6017\"\u003e\u003ccode\u003eb169d23\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/86274cc0acc9fc6d608e251c874105c94634bddf\"\u003e\u003ccode\u003e86274cc\u003c/code\u003e\u003c/a\u003e ✨ Add support for optional unions of form models (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16586\"\u003e#16586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/68cc4cbb2e0600841b0d6bdd1cc29038b54a00e6\"\u003e\u003ccode\u003e68cc4cb\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.159.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16585\"\u003e#16585\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/fea4dedffddcf5641514334b78f69a9d93b1eb04\"\u003e\u003ccode\u003efea4ded\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/2f6d43c6ecc9a392ea0fcb14c0b063e76b448b62\"\u003e\u003ccode\u003e2f6d43c\u003c/code\u003e\u003c/a\u003e ✨ Add support for optional query, header, and cookie parameter models (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16584\"\u003e#16584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e4c5d0293470f107bc0b4886f484a48c1315d091\"\u003e\u003ccode\u003ee4c5d02\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.158.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16583\"\u003e#16583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7507c64b2906a3ca78802fe4a0241ec8b1f3818e\"\u003e\u003ccode\u003e7507c64\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/410270fa3bac8b9f8b46bf1f5a1a3f06f3ede327\"\u003e\u003ccode\u003e410270f\u003c/code\u003e\u003c/a\u003e ✨ Add support for optional form models (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16582\"\u003e#16582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ed39e8b192a24da5b6b609436403da11ad4a93e8\"\u003e\u003ccode\u003eed39e8b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.158.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16580\"\u003e#16580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.159.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.54.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.54.0\u003c/h2\u003e\n\u003ch2\u003e📨 Send metadata after the response body\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.54.0 adds response trailers and \u003ccode\u003e103 Early Hints\u003c/code\u003e to its experimental HTTP/2 implementation through \u003ccode\u003ezttp\u003c/code\u003e.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.54.0 \u0026quot;zttp\u0026gt;=0.0.34\u0026quot;\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend HTTP/2 response trailers\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e). The ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension lets applications send metadata, such as checksums, after the response body. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them. Multiple trailer messages are combined before completing the response.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental and opt-in.\u003c/strong\u003e Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Upgrade-based h2c and WebSockets over HTTP/2 remain unsupported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e💡 Hint at resources before the final response\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend \u003ccode\u003e103 Early Hints\u003c/code\u003e over HTTP/2\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e). Applications can use the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension to send resource hints before the final response. Each supplied link becomes a separate \u003ccode\u003eLink\u003c/code\u003e header.\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.53.0...0.54.0\"\u003e0.53.0...0.54.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.53.0\u003c/h2\u003e\n\u003ch2\u003e🌐 Opt-in HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.53.0 adds experimental HTTP/2 through \u003ccode\u003ezttp\u003c/code\u003e, alongside a new \u003ccode\u003ezuvloop\u003c/code\u003e integration and connection-handling improvements.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.53.0\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eServe HTTP/1.1 and HTTP/2 with \u003ccode\u003ezttp\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e). Install \u003ccode\u003ezttp\u003c/code\u003e, then enable HTTP/2 with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Uvicorn negotiates HTTP/2 over TLS with ALPN and supports cleartext prior knowledge.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental.\u003c/strong\u003e Upgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚙️ More event loop choice\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eRun Uvicorn with \u003ccode\u003ezuvloop\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e). Install \u003ccode\u003ezuvloop\u003c/code\u003e separately and select it explicitly with \u003ccode\u003e--loop zuvloop\u003c/code\u003e on CPython 3.14 or newer.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🛡️ More reliable connections and proxies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHonor \u003ccode\u003eConnection: close\u003c/code\u003e token lists\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e). Uvicorn now parses comma-separated tokens case-insensitively across HTTP implementations.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTrust IPv6 loopback proxies by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e). The default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value now includes \u003ccode\u003e::1\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKeep upgraded WebSockets alive\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e). Uvicorn cancels the HTTP keep-alive timer when the connection becomes a WebSocket.\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.52.4...0.53.0\"\u003e0.52.4...0.53.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\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.52.3...0.52.4\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/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.54.0 (September 24, 2026)\u003c/h2\u003e\n\u003cp\u003eHTTP/2 support remains experimental. Install \u003ccode\u003ezttp\u0026gt;=0.0.34\u003c/code\u003e and enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd HTTP/2 response trailers through the ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd HTTP/2 \u003ccode\u003e103 Early Hints\u003c/code\u003e through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.53.0 (September 14, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release adds experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e. Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\nUpgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003ezuvloop\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle comma-separated, case-insensitive \u003ccode\u003eConnection: close\u003c/code\u003e tokens across HTTP implementations (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTrust IPv6 loopback in the default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancel the HTTP keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.4 (August 18, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.3 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.2 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.1 (August 1, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComplete the closing handshake on server-initiated WebSocket closes in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e and \u003ccode\u003ewsproto\u003c/code\u003e implementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3053\"\u003e#3053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing write flow control to the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, preventing data truncation on server-initiated closes with large in-flight payloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3048\"\u003e#3048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle connection loss while a WebSocket write is waiting on backpressure (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3050\"\u003e#3050\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3eb9a9ab9af69005c687728097461c1fd2a95db9\"\u003e\u003ccode\u003e3eb9a9a\u003c/code\u003e\u003c/a\u003e Version 0.54.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3161\"\u003e#3161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/cd7ef6d31c1a09a3653f326cda7813d35ffd6082\"\u003e\u003ccode\u003ecd7ef6d\u003c/code\u003e\u003c/a\u003e Remove races from supervisor tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3134\"\u003e#3134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a56c7cce64aaa37e5864f882a5cbce8aa1dac47a\"\u003e\u003ccode\u003ea56c7cc\u003c/code\u003e\u003c/a\u003e Support HTTP/2 response trailers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3146\"\u003e#3146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9bd4404cca9506e9ba4f46b69ef72d011ceef2bd\"\u003e\u003ccode\u003e9bd4404\u003c/code\u003e\u003c/a\u003e chore(deps): bump anyio from 4.13.0 to 4.14.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3145\"\u003e#3145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/21f39ef7988366f77fb3172569bd235ac5de34cc\"\u003e\u003ccode\u003e21f39ef\u003c/code\u003e\u003c/a\u003e Add HTTP/2 Early Hints support (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/421708fbc1a704dac8bd4053a7c4c0bf4d3704ee\"\u003e\u003ccode\u003e421708f\u003c/code\u003e\u003c/a\u003e Version 0.53.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3136\"\u003e#3136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/f1a1bff7be819f5724d6fdf86dfd448a97c62e23\"\u003e\u003ccode\u003ef1a1bff\u003c/code\u003e\u003c/a\u003e Unset the keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/63971ed952090438896e6eba7d07178b616d97cc\"\u003e\u003ccode\u003e63971ed\u003c/code\u003e\u003c/a\u003e Document HTTP/2 support (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3130\"\u003e#3130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7d1a0055aee5e281accc646b559ddd147486bf8a\"\u003e\u003ccode\u003e7d1a005\u003c/code\u003e\u003c/a\u003e Remove race from multiprocess health check test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3128\"\u003e#3128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/5ac6265a01ff6dcadb0e4250152c3deaf8a168a9\"\u003e\u003ccode\u003e5ac6265\u003c/code\u003e\u003c/a\u003e Add ::1 to FORWARDED_ALLOW_IPS (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.54.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.4 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...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-settings` from 2.14.1 to 2.16.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.16.1\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThis patch release fixes two CLI regressions introduced in 2.16.0.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed-length tuple positionals such as \u003ccode\u003eCliPositionalArg[tuple[int, int]]\u003c/code\u003e and \u003ccode\u003eNamedTuple\u003c/code\u003es are single-valued again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1069\"\u003e#1069\u003c/a\u003e). Since 2.16.0 they were treated as variadic, so a CLI either refused to start with a \u003ccode\u003eSettingsError\u003c/code\u003e or put the wrong argument into the tuple. Variable-length tuples (\u003ccode\u003etuple[int, ...]\u003c/code\u003e and bare \u003ccode\u003eTuple\u003c/code\u003e) are still variadic.\u003c/li\u003e\n\u003cli\u003eA field typed as an alias of a list of dicts, e.g. \u003ccode\u003etype ListOfDict = list[dict[str, int]]\u003c/code\u003e, accepts a JSON list again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1049\"\u003e#1049\u003c/a\u003e). Since 2.16.0, \u003ccode\u003e--xx '[{\u0026quot;a\u0026quot;:1},{\u0026quot;b\u0026quot;:2}]'\u003c/code\u003e was merged into the single dict \u003ccode\u003e{\u0026quot;a\u0026quot;: 1, \u0026quot;b\u0026quot;: 2}\u003c/code\u003e and failed validation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden CI by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1044\"\u003epydantic/pydantic-settings#1044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep list of dicts CLI values as lists 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/1049\"\u003epydantic/pydantic-settings#1049\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep fixed-length tuple CLI positionals single-valued 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/1069\"\u003epydantic/pydantic-settings#1069\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.16.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/1087\"\u003epydantic/pydantic-settings#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1056\"\u003epydantic/pydantic-settings#1056\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.16.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBreaking changes and behavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.10 is no longer supported\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1003\"\u003e#1003\u003c/a\u003e). pydantic-settings now requires Python 3.11+, since 3.10 reaches end of life this month. The \u003ccode\u003etomli\u003c/code\u003e fallback is gone in favor of stdlib \u003ccode\u003etomllib\u003c/code\u003e; the \u003ccode\u003etoml\u003c/code\u003e extra is kept as an empty extra so \u003ccode\u003epip install pydantic-settings[toml]\u003c/code\u003e keeps working.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003epython-dotenv\u0026gt;=1.2.2\u003c/code\u003e is now required\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/971\"\u003e#971\u003c/a\u003e) to pick up the fix for CVE-2026-28684.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAliases are ignored in every source when \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1033\"\u003e#1033\u003c/a\u003e). Env vars, secrets, CLI flags and defaults now use only field names, matching pydantic. An env var named after the alias is now ignored instead of raising \u003ccode\u003eextra_forbidden\u003c/code\u003e, and the CLI exposes \u003ccode\u003e--apple\u003c/code\u003e rather than \u003ccode\u003e--pomo\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003evalidation_alias\u003c/code\u003e takes precedence over \u003ccode\u003ealias\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1038\"\u003e#1038\u003c/a\u003e). When the two differ, values from JSON/YAML/TOML files and the CLI were silently ignored; they now load. CLI help lists the \u003ccode\u003evalidation_alias\u003c/code\u003e flag first, and \u003ccode\u003eCliApp.serialize\u003c/code\u003e emits it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCLI case-insensitivity only lowercases registered options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1036\"\u003e#1036\u003c/a\u003e). With \u003ccode\u003ecase_sensitive=False\u003c/code\u003e, args after \u003ccode\u003e--\u003c/code\u003e and those captured by \u003ccode\u003eCliUnknownArgs\u003c/code\u003e keep their case (\u003ccode\u003e-Xmx4G\u003c/code\u003e no longer becomes \u003ccode\u003e-xmx4g\u003c/code\u003e). Unrecognized options are now reported as typed (\u003ccode\u003e--NOPE\u003c/code\u003e instead of \u003ccode\u003e--nope\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eJSON and YAML config files are read as UTF-8 by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/955\"\u003e#955\u003c/a\u003e) instead of the locale encoding, completing the secrets-file fix from 2.15.0. \u003ccode\u003ejson_file_encoding\u003c/code\u003e/\u003ccode\u003eyaml_file_encoding\u003c/code\u003e still override it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDiscriminated union defaults are partially updated again\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/997\"\u003e#997\u003c/a\u003e). This reverts the 2.15.0 regression with \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e: the default is only dropped when the incoming value selects a \u003cem\u003edifferent\u003c/em\u003e union member.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.15 and pydantic 2.14 support\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1026\"\u003e#1026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1029\"\u003e#1029\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1022\"\u003e#1022\u003c/a\u003e). pydantic 2.14 broke \u003ccode\u003eCliApp.run\u003c/code\u003e and \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e handling; both are fixed.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCached settings instances\u003c/strong\u003e via \u003ccode\u003eSettings.settings_cached()\u003c/code\u003e and \u003ccode\u003eSettings.settings_clear_cache()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/952\"\u003e#952\u003c/a\u003e). These give you a process-local singleton per settings class without hand-rolling \u003ccode\u003elru_cache\u003c/code\u003e wrappers. Calling the class directly still builds a fresh instance.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAWS Systems Manager Parameter Store source\u003c/strong\u003e — \u003ccode\u003eAWSSystemsManagerSettingsSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/941\"\u003e#941\u003c/a\u003e). It recursively reads every parameter under an \u003ccode\u003essm_path\u003c/code\u003e, with \u003ccode\u003e/\u003c/code\u003e mapping onto nested models. Install it with the new \u003ccode\u003eaws-systems-manager\u003c/code\u003e extra.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenv_file_depth\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/940\"\u003e#940\u003c/a\u003e) lets a relative \u003ccode\u003eenv_file\u003c/code\u003e be found in parent directories, mirroring \u003ccode\u003epyproject_toml_depth\u003c/code\u003e. This is useful when scripts run from a subdirectory of a monorepo. It defaults to \u003ccode\u003e0\u003c/code\u003e, which keeps the current behavior.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eCliVariadicArg\u003c/code\u003e for named variadic options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/949\"\u003e#949\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/958\"\u003e#958\u003c/a\u003e). It accepts \u003ccode\u003e--param a b c\u003c/code\u003e in addition to repeated \u003ccode\u003e--param a --param b\u003c/code\u003e. Required fields need at least one value.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4e286e284fe43f0fb86872b91f708d3dd5356bfc\"\u003e\u003ccode\u003e4e286e2\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1087\"\u003e#1087\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/993b59e1682799d5ad33b721b7158718b6278944\"\u003e\u003ccode\u003e993b59e\u003c/code\u003e\u003c/a\u003e Keep fixed-length tuple CLI positionals single-valued (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1069\"\u003e#1069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f651a7a57a0e3b26147da02f2fda2d05f8c34cce\"\u003e\u003ccode\u003ef651a7a\u003c/code\u003e\u003c/a\u003e Keep list of dicts CLI values as lists (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1049\"\u003e#1049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ecf7d90bf1b1b71f2875f607c1668c44f576bf9c\"\u003e\u003ccode\u003eecf7d90\u003c/code\u003e\u003c/a\u003e Harden CI (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1044\"\u003e#1044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8c259f41b49b4cefbe4fb676d3c1f52dddd3cca8\"\u003e\u003ccode\u003e8c259f4\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1043\"\u003e#1043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4bc667ada383aca4df00304cd171f327a9fae163\"\u003e\u003ccode\u003e4bc667a\u003c/code\u003e\u003c/a\u003e Keep case of non-option CLI args when case_sensitive=False (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f75a8057a5fafe4aef3a042c2adf367c6987f73f\"\u003e\u003ccode\u003ef75a805\u003c/code\u003e\u003c/a\u003e Simplify alias resolution branch and test alias with AliasChoices/AliasPath (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/cfdc5585e821e84905905027de68a0188213537a\"\u003e\u003ccode\u003ecfdc558\u003c/code\u003e\u003c/a\u003e Honor env_parse_none_str for GCP Secret Manager (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1040\"\u003e#1040\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/081d39f9c73f46e68bc2bef75a23f7d84ed0c377\"\u003e\u003ccode\u003e081d39f\u003c/code\u003e\u003c/a\u003e Fix config file and CLI values being ignored when alias differs from validati...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c46ebc4cc599c09f3692f4d2e82a8f0bb5433f3a\"\u003e\u003ccode\u003ec46ebc4\u003c/code\u003e\u003c/a\u003e Expand home paths when checking TOML table headers (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.1...v2.16.1\"\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.29 to 0.0.32\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.32\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace per-byte partial-boundary scan with rfind lookbehind by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003eKludex/python-multipart#300\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.31\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/295\"\u003eKludex/python-multipart#295\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/296\"\u003eKludex/python-multipart#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate Content-Length is non-negative in parse_form by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/297\"\u003eKludex/python-multipart#297\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.30\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTreat only \u003ccode\u003e\u0026amp;\u003c/code\u003e as the urlencoded field separator by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/290\"\u003eKludex/python-multipart#290\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231 extended parameters in \u003ccode\u003eparse_options_header\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003eKludex/python-multipart#291\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.29...0.0.30\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.29...0.0.30\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.32 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary scanning for CR/LF-dense part data \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003e#300\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.31 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/295\"\u003e#295\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/296\"\u003e#296\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eValidate \u003ccode\u003eContent-Length\u003c/code\u003e is non-negative in \u003ccode\u003eparse_form\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/297\"\u003e#297\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.30 (2026-05-31)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eParse \u003ccode\u003eapplication/x-www-form-urlencoded\u003c/code\u003e bodies per the WHATWG URL standard, treating only \u003ccode\u003e\u0026amp;\u003c/code\u003e as a field separator \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/290\"\u003e#290\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231/5987 extended parameters (\u003ccode\u003ename*\u003c/code\u003e, \u003ccode\u003efilename*\u003c/code\u003e) in \u003ccode\u003eparse_options_header\u003c/code\u003e, keeping the plain parameter authoritative per \u003ca href=\"https://datatracker.ietf.org/doc/html/rfc7578#section-4.2\"\u003eRFC 7578 §4.2\u003c/a\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003e#291\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/238ead62a0bb6f6cdfe122708faa13812f59f9a6\"\u003e\u003ccode\u003e238ead6\u003c/code\u003e\u003c/a\u003e Version 0.0.32 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/302\"\u003e#302\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/86729796093b04f7cf414ea6c2c4499e2a5750af\"\u003e\u003ccode\u003e8672979\u003c/code\u003e\u003c/a\u003e Replace per-byte partial-boundary scan with rfind lookbehind (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/300\"\u003e#300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/8190779d8234c8bf8cbed7891c11d4bfb79e84df\"\u003e\u003ccode\u003e8190779\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 7 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/301\"\u003e#301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/0d3c086d237f6fd20fefe8853e95979276a07c44\"\u003e\u003ccode\u003e0d3c086\u003c/code\u003e\u003c/a\u003e Use uv package ecosystem for Dependabot (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/4cffc68a165f7a6f6b7756ce006fabf07a05b7a4\"\u003e\u003ccode\u003e4cffc68\u003c/code\u003e\u003c/a\u003e Version 0.0.31 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/c814948acf509cef7881fa75c969969b19239bbf\"\u003e\u003ccode\u003ec814948\u003c/code\u003e\u003c/a\u003e Reject negative \u003ccode\u003eContent-Length\u003c/code\u003e in \u003ccode\u003eparse_form\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/297\"\u003e#297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6b837d47bc68826ed5cbbcb50c6c6a6093444494\"\u003e\u003ccode\u003e6b837d4\u003c/code\u003e\u003c/a\u003e Bound header field name size before validating (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/e0c4f9df2e737d1663fbbdd6563f80613a2089f9\"\u003e\u003ccode\u003ee0c4f9d\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/294\"\u003e#294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b8a01bb683e8e8675fdb5d831b206a478c8215aa\"\u003e\u003ccode\u003eb8a01bb\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6732164f30c58e28589a1e22213d2f6b8c6bad9f\"\u003e\u003ccode\u003e6732164\u003c/code\u003e\u003c/a\u003e Speed up multipart header parsing and callback dispatch (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/295\"\u003e#295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.29...0.0.32\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 9.0.3 to 9.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.1.1\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.1 (2026-06-19)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e: Fixed a logic bug in \u003ccode\u003epytest.RaisesGroup\u003c/code\u003e which would might cause it to display incorrect \u0026quot;It matches \u003c!-- raw HTML omitted --\u003eFooError()\u003c!-- raw HTML omitted --\u003e which was paired with \u003c!-- raw HTML omitted --\u003eBarError\u003c!-- raw HTML omitted --\u003e\u0026quot; messages.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14591\"\u003e#14591\u003c/a\u003e: Fixed a regression in pytest 9.1.0 which caused overriding a parametrized fixture with an indirect \u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/pytest\"\u003e\u003ccode\u003e@​pytest\u003c/code\u003e\u003c/a\u003e.mark.parametrize\u003c!-- raw HTML omitted --\u003e to fail with \u0026quot;duplicate parametrization of '\u0026lt;fixture name\u0026gt;'\u0026quot;.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14606\"\u003e#14606\u003c/a\u003e: Fixed \u003ccode\u003elist-item\u003c/code\u003e typing errors from mypy in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e \u003ccode\u003eargvalues\u003c/code\u003e parameter.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14608\"\u003e#14608\u003c/a\u003e: Fixed a regression in pytest 9.1.0 where \u003ccode\u003econftest.py\u003c/code\u003e files located in \u003ccode\u003e\u0026lt;invocation dir\u0026gt;/test*\u003c/code\u003e were no longer loaded as initial conftests when invoked without arguments.\nThis could cause certain hooks (like \u003ccode\u003epytest_addoption\u003c/code\u003e) in these files to not fire.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e9.1.0\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.0 (2026-06-13)\u003c/h1\u003e\n\u003ch2\u003eRemovals and backward incompatible breaking changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14533\"\u003e#14533\u003c/a\u003e: When using \u003ccode\u003e--doctest-modules\u003c/code\u003e, autouse fixtures with \u003ccode\u003emodule\u003c/code\u003e, \u003ccode\u003epackage\u003c/code\u003e or \u003ccode\u003esession\u003c/code\u003e scope that are defined inline in Python test modules (not plugins or conftests) will now possibly execute twice.\u003c/p\u003e\n\u003cp\u003eIf this is undesirable, move the fixture definition to a \u003ccode\u003econftest.py\u003c/code\u003e file if possible.\u003c/p\u003e\n\u003cp\u003eTechnical explanation for those interested:\nWhen using \u003c!-- raw HTML omitted --\u003e--doctest-modules\u003c!-- raw HTML omitted --\u003e, pytest possibly collects Python modules twice, once as \u003ccode\u003epytest.Module\u003c/code\u003e and once as a \u003ccode\u003eDoctestModule\u003c/code\u003e (depending on the configuration).\nDue to improvements in pytest's fixture implementation, if e.g. the \u003ccode\u003eDoctestModule\u003c/code\u003e collects a fixture, it is now visible to it only, and not to the \u003ccode\u003eModule\u003c/code\u003e.\nThis means that both need to register the fixtures independently.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations (removal in next major release)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/10819\"\u003e#10819\u003c/a\u003e: Added a deprecation warning for class-scoped fixtures defined as instance methods (without \u003ccode\u003e@classmethod\u003c/code\u003e). Such fixtures set attributes on a different instance than the test methods use, leading to unexpected behavior. Use \u003ccode\u003e@classmethod\u003c/code\u003e decorator instead -- by \u003ccode\u003eyastcher\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003e10819\u003c/code\u003e and \u003ccode\u003e14011\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12882\"\u003e#12882\u003c/a\u003e: Calling \u003ccode\u003erequest.getfixturevalue() \u0026lt;pytest.FixtureRequest.getfixturevalue\u0026gt;\u003c/code\u003e during teardown to request a fixture that was not already requested is now deprecated and will become an error in pytest 10.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003edynamic-fixture-request-during-teardown\u003c/code\u003e for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13409\"\u003e#13409\u003c/a\u003e: Using non-\u003ccode\u003e~collections.abc.Collection\u003c/code\u003e iterables (such as generators, iterators, or custom iterable objects) for the \u003ccode\u003eargvalues\u003c/code\u003e parameter in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e and \u003ccode\u003emetafunc.parametrize \u0026lt;pytest.Metafunc.parametrize\u0026gt;\u003c/code\u003e is now deprecated.\u003c/p\u003e\n\u003cp\u003eThese iterables get exhausted after the first iteration,\nleading to tests getting unexpectedly skipped in cases such as running \u003ccode\u003epytest.main()\u003c/code\u003e multiple times,\nusing class-level parametrize decorators,\nor collecting tests multiple times.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003eparametrize-iterators\u003c/code\u003e for details and suggestions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13946\"\u003e#13946\u003c/a\u003e: The private \u003ccode\u003econfig.inicfg\u003c/code\u003e attribute is now deprecated.\nUse \u003ccode\u003econfig.getini() \u0026lt;pytest.Config.getini\u0026gt;\u003c/code\u003e to access configuration values instead.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003econfig-inicfg\u003c/code\u003e for more details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14004\"\u003e#14004\u003c/a\u003e: Passing \u003ccode\u003ebaseid\u003c/code\u003e to \u003ccode\u003e~pytest.FixtureDef\u003c/code\u003e or \u003ccode\u003enodeid\u003c/code\u003e strings to fixture registration APIs is now deprecated. These are internal pytest APIs that are used by some plugins.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/cf470ec0bf7eb89cd97dd56df4859eae5db46447\"\u003e\u003ccode\u003ecf470ec\u003c/code\u003e\u003c/a\u003e Prepare release version 9.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/e0c8ce6cc5db1f08363be6f152c32e6838df2690\"\u003e\u003ccode\u003ee0c8ce6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14625\"\u003e#14625\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/a07c31a97...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/1b82d1694fce22385ee7a4287917fbafbaf2e757\"\u003e\u003ccode\u003e1b82d16\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14624\"\u003e#14624\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/b375b79ec...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/501c4bc784da3b08bfcaa64858eba5d15dc59e53\"\u003e\u003ccode\u003e501c4bc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14596\"\u003e#14596\u003c/a\u003e from bluetech/doc-classmethod\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b61f588e36e9377c3d1d3f06bece1da0fc31d9ca\"\u003e\u003ccode\u003eb61f588\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14622\"\u003e#14622\u003c/a\u003e from chrisburr/fix-14608-initial-conftest-test-subdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/9a567e009f4d2da3ce1721c6db3109cb5744d40a\"\u003e\u003ccode\u003e9a567e0\u003c/code\u003e\u003c/a\u003e [automated] Update plugin list (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14617\"\u003e#14617\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14618\"\u003e#14618\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ef8b2993e5b48639e4a3d97d0525df9760781384\"\u003e\u003ccode\u003eef8b299\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14620\"\u003e#14620\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/680f9f3ed...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/66abd0784d4cb7c1ba44ab9a8896506cd4985acc\"\u003e\u003ccode\u003e66abd07\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e from bysiber/fix-stale-iexp-raisesgroup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/79fbf93b666cac5f27c9dad047943d47b766c8d5\"\u003e\u003ccode\u003e79fbf93\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14612\"\u003e#14612\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/974ed48b6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/0d312eb876177e9f1c04262b54060a41034ebf5c\"\u003e\u003ccode\u003e0d312eb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14611\"\u003e#14611\u003c/a\u003e from bluetech/parametrize-argvalues-typing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.0.3...9.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `croniter` from 6.2.2 to 6.2.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/croniter/releases\"\u003ecroniter's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.2.4\u003c/h2\u003e\n\u003ch2\u003ecroniter 6.2.4\u003c/h2\u003e\n\u003ch3\u003eBugfixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eexpand_from_start_time\u003c/code\u003e day-of-week low bound so Sunday wraps correctly for stepped day-of-week ranges (\u003ccode\u003eisoweekday() % 7\u003c/code\u003e instead of \u003ccode\u003eweekday() + 1\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/239\"\u003e#239\u003c/a\u003e, thanks \u003ca href=\"https://github.com/alhudz\"\u003e\u003ccode\u003e@​alhudz\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePackaging\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump pinned GitHub Actions via dependabot. (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/238\"\u003e#238\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/240\"\u003e#240\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eInstall:\u003c/strong\u003e \u003ccode\u003epip install croniter==6.2.4\u003c/code\u003e · \u003ca href=\"https://pypi.org/project/croniter/6.2.4/\"\u003ePyPI\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.2.3\u003c/h2\u003e\n\u003cp\u003eNo release notes provided.\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/croniter/blob/main/CHANGELOG.rst\"\u003ecroniter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.2.4 (2026-07-10)\u003c/h2\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Fix ``expand_from_start_time`` day-of-week low bound so Sunday wraps correctly for stepped day-of-week ranges (``isoweekday() % 7`` instead of ``weekday() + 1``). [44e3090, [#239](https://github.com/pallets-eco/croniter/issues/239), @alhudz]\n\u003cp\u003ePackaging\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBump pinned GitHub Actions via dependabot. [fd13d2e, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/240\"\u003e#240\u003c/a\u003e; 5cd2e46, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/238\"\u003e#238\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.3 (2026-07-02)\u003c/h2\u003e\n\u003cp\u003eFeatures and Improvements\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Fix quadratic expansion of comma-separated range lists for a large speed-up on expressions with many ranges. [1d79fc6, [#231](https://github.com/pallets-eco/croniter/issues/231), @alhudz]\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Reject a zero step (e.g. ``5-5/0``) in equal and reversed cron ranges instead of silently accepting it. [ab27767, [#232](https://github.com/pallets-eco/croniter/issues/232), @alhudz]\n- Fix ``expand_from_start_time`` month low-bound off-by-one so stepped month ranges start on the correct month. [f329964, [#235](https://github.com/pallets-eco/croniter/issues/235), @alhudz]\n\nPackaging\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eFix zizmor-reported security findings in GitHub Actions workflows. [ed19f94, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/230\"\u003e#230\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eBump pinned build and CI dependencies via dependabot.\u003c/li\u003e\n\u003cli\u003eUpgrade locked development and build dependencies (\u003ccode\u003euv lock --upgrade\u003c/code\u003e).\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/58534997eb4634344f00d407fb199d4d1bd057e7\"\u003e\u003ccode\u003e5853499\u003c/code\u003e\u003c/a\u003e Prepare for release 6.2.4 (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/241\"\u003e#241\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/fd13d2ec447efd854806638cb5f71a2a3a90a0b5\"\u003e\u003ccode\u003efd13d2e\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/240\"\u003e#240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/44e3090ae47ccf72e4027ed6fabf6a31eca42f85\"\u003e\u003ccode\u003e44e3090\u003c/code\u003e\u003c/a\u003e wrap sunday in expand_from_start_time day-of-week low bound (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/239\"\u003e#239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/5cd2e4611e8ebea446a9d0edef3f9d8e1f30c0e3\"\u003e\u003ccode\u003e5cd2e46\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/238\"\u003e#238\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/f1eeddd7b9057b66406d162d04879258b29601d5\"\u003e\u003ccode\u003ef1eeddd\u003c/code\u003e\u003c/a\u003e Prepare for 6.2.4 development (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/237\"\u003e#237\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/22b59e05f5ca485c45596b2a9b580fddffbf753f\"\u003e\u003ccode\u003e22b59e0\u003c/code\u003e\u003c/a\u003e Prepare for release 6.2.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/236\"\u003e#236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/ab277671adc8e446e8dc7f1e939eabf024b6199e\"\u003e\u003ccode\u003eab27767\u003c/code\u003e\u003c/a\u003e reject zero step in equal and reversed cron ranges (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/232\"\u003e#232\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/f329964223eeb29e7788b1a9d615b525148fec96\"\u003e\u003ccode\u003ef329964\u003c/code\u003e\u003c/a\u003e fix expand_from_start_time month low bound off-by-one (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/235\"\u003e#235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/9810279c20030954e2f1ed2cf5f1d34b98c6b07f\"\u003e\u003ccode\u003e9810279\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/233\"\u003e#233\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/d051aaf6342fbe9c559b9fcd99e6fb6f3bb63cb7\"\u003e\u003ccode\u003ed051aaf\u003c/code\u003e\u003c/a\u003e Bump hatchling from 1.29.0 to 1.30.1 in the pip-dependencies group (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/234\"\u003e#234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/croniter/compare/6.2.2...6.2.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 \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/sphildreth/spf5000/pull/10","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphildreth%2Fspf5000/issues/10","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/10/packages"},{"uuid":"5999437116","node_id":"PR_kwDOVPvI2M8AAAABKRQRMA","number":7,"state":"closed","title":"Bump the python group with 4 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-10-23T14:27:20.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-23T14:16:10.000Z","updated_at":"2026-10-23T14:27:31.000Z","time_to_close":670,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":4,"packages":[{"name":"pydantic","old_version":"2.13.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"tenacity","old_version":"9.1.4","new_version":"9.2.1","repository_url":"https://github.com/jd/tenacity"},{"name":"regex","old_version":"2026.9.10","new_version":"2026.9.29","repository_url":"https://github.com/mrabarnett/mrab-regex"},{"name":"ruff","old_version":"0.16.8","new_version":"0.17.1","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 4 updates: [pydantic](https://github.com/pydantic/pydantic), [tenacity](https://github.com/jd/tenacity), [regex](https://github.com/mrabarnett/mrab-regex) and [ruff](https://github.com/astral-sh/ruff).\n\nUpdates `pydantic` from 2.13.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tenacity` from 9.1.4 to 9.2.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jd/tenacity/releases\"\u003etenacity's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.2.1\u003c/h2\u003e\n\u003cp\u003e9.2.0 was tagged but never reached PyPI: the upload rejected its package description (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/714\"\u003e#714\u003c/a\u003e). 9.2.1 is the first release on PyPI with everything in \u003ca href=\"https://github.com/jd/tenacity/releases/tag/9.2.0\"\u003e9.2.0\u003c/a\u003e, plus the changes below.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore(mypy): drop vestigial tornado ignore_missing_imports override by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/676\"\u003ejd/tenacity#676\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: annotate wait_base.\u003cstrong\u003eradd\u003c/strong\u003e as taking the int seed from sum() by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/677\"\u003ejd/tenacity#677\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(mypy): enable the strictness options \u003ccode\u003estrict\u003c/code\u003e leaves off by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/678\"\u003ejd/tenacity#678\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: drop always-true truthiness checks and enable truthy-bool by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/679\"\u003ejd/tenacity#679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: declare BaseAction's REPR_FIELDS and NAME as ClassVar by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/680\"\u003ejd/tenacity#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: fix possibly-undefined and deprecated call sites by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/681\"\u003ejd/tenacity#681\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: mark overridden methods with \u003ca href=\"https://github.com/override\"\u003e\u003ccode\u003e@​override\u003c/code\u003e\u003c/a\u003e by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/682\"\u003ejd/tenacity#682\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: restore support for falsy wait values and callable + strategy by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/694\"\u003ejd/tenacity#694\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: read the tornado global live instead of an import-time snapshot by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/696\"\u003ejd/tenacity#696\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect enabled=False on the direct-call path by \u003ca href=\"https://github.com/mahirhir\"\u003e\u003ccode\u003e@​mahirhir\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/645\"\u003ejd/tenacity#645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: only treat None and 0 as \u0026quot;no wait\u0026quot; by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/741\"\u003ejd/tenacity#741\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: restore PyPI-compatible package description by \u003ca href=\"https://github.com/arindamsikder\"\u003e\u003ccode\u003e@​arindamsikder\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/725\"\u003ejd/tenacity#725\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: check built distributions with twine by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/742\"\u003ejd/tenacity#742\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/mahirhir\"\u003e\u003ccode\u003e@​mahirhir\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/645\"\u003ejd/tenacity#645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kozlek\"\u003e\u003ccode\u003e@​kozlek\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/733\"\u003ejd/tenacity#733\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/arindamsikder\"\u003e\u003ccode\u003e@​arindamsikder\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/725\"\u003ejd/tenacity#725\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jd/tenacity/compare/9.2.0...9.2.1\"\u003ehttps://github.com/jd/tenacity/compare/9.2.0...9.2.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e9.2.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix ordinal suffix generation for large numbers ending in 11, 12, 13 by \u003ca href=\"https://github.com/ArmaanjeetSandhu\"\u003e\u003ccode\u003e@​ArmaanjeetSandhu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/556\"\u003ejd/tenacity#556\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: replace tox with poethepoet + uv by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/558\"\u003ejd/tenacity#558\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix README badges by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/559\"\u003ejd/tenacity#559\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add project URLs to pyproject.toml by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/560\"\u003ejd/tenacity#560\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add local dev commands to contribute section by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/561\"\u003ejd/tenacity#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: modernize async examples by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/562\"\u003ejd/tenacity#562\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: set version in sphinx conf by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/563\"\u003ejd/tenacity#563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve tornado mypy errors instead of suppressing them by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/568\"\u003ejd/tenacity#568\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add poe fmt task for auto-formatting by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/569\"\u003ejd/tenacity#569\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: replace curio example with trio by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/570\"\u003ejd/tenacity#570\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: enable ruff I, UP, B rules and auto-fix codebase by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/571\"\u003ejd/tenacity#571\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: harden release workflow by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/575\"\u003ejd/tenacity#575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use typing.Self on Python 3.11+ instead of typing_extensions by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/576\"\u003ejd/tenacity#576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump tornado version floor to \u0026gt;=6.0 by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/578\"\u003ejd/tenacity#578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clean up sphinx conf.py by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/579\"\u003ejd/tenacity#579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove stale noqa comments from \u003cstrong\u003einit\u003c/strong\u003e.py by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/577\"\u003ejd/tenacity#577\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: enable additional ruff rules and fix violations by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/584\"\u003ejd/tenacity#584\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: enable mypy strict mode in all test files by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/585\"\u003ejd/tenacity#585\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: make LoggerProtocol compatible with logging.Logger by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/586\"\u003ejd/tenacity#586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove unused IterState.delay_since_first_attempt field by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/587\"\u003ejd/tenacity#587\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove redundant raise before reraise() by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/588\"\u003ejd/tenacity#588\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: replace deprecated typing.Pattern with re.Pattern by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/589\"\u003ejd/tenacity#589\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix typos in docstrings by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/590\"\u003ejd/tenacity#590\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/jd/tenacity/commit/4410996dd9a96864a2733ce0778bcaa112b72811\"\u003e\u003ccode\u003e4410996\u003c/code\u003e\u003c/a\u003e ci: check built distributions with twine (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/b23844175feb8c62f4ebb0ef0833d993f439fa1f\"\u003e\u003ccode\u003eb238441\u003c/code\u003e\u003c/a\u003e fix: restore PyPI-compatible package description (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/b6201eceedfc719e996dcbc3f6c17f21011fb236\"\u003e\u003ccode\u003eb6201ec\u003c/code\u003e\u003c/a\u003e fix: only treat None and 0 as \u0026quot;no wait\u0026quot; (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/4a74682e0186b5f2d25906aa190cd639c705a958\"\u003e\u003ccode\u003e4a74682\u003c/code\u003e\u003c/a\u003e ci: drop the Mergify queue rule (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/739\"\u003e#739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/91169719f4fd127d680cafe026f1f95f04292094\"\u003e\u003ccode\u003e9116971\u003c/code\u003e\u003c/a\u003e ci: drop Mergify dismiss_reviews rule (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/737\"\u003e#737\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/2374b61424aab29769c3428b06d576ffc1a5a1d9\"\u003e\u003ccode\u003e2374b61\u003c/code\u003e\u003c/a\u003e ci: rely on the ruleset for the ci-gate check (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/736\"\u003e#736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/6df1aab1a2df84f2779f5f308c6171df9d051a35\"\u003e\u003ccode\u003e6df1aab\u003c/code\u003e\u003c/a\u003e ci: gate merges on a single ci-gate job (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/734\"\u003e#734\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/5f540fad77cbd90b4bcb21a9b859d5b07c08ba54\"\u003e\u003ccode\u003e5f540fa\u003c/code\u003e\u003c/a\u003e chore(mergify): replace deprecated autoqueue with auto_merge_conditions (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/8be01b1daf2010566fd936a5c2214efefa43edff\"\u003e\u003ccode\u003e8be01b1\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump ruff from 0.16.5 to 0.16.9 in the python group (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/3e58094d3bc414975aad9eadf343a32bdb3b89b3\"\u003e\u003ccode\u003e3e58094\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump the python group with 2 updates (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/707\"\u003e#707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jd/tenacity/compare/9.1.4...9.2.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `regex` from 2026.9.10 to 2026.9.29\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mrabarnett/mrab-regex/blob/hg/changelog.txt\"\u003eregex's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eVersion: 2026.9.29\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eUpdated to Unicode 18.0.0.\n\u003cp\u003eSwitched to using stdbool.h and stdint.h.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eVersion: 2026.9.19\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eGit issue 619: `Match.expand()` segfaults after `detach_string()` when the template references a group\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.9.10\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eFixed version.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.9.9\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ePR [#615](https://github.com/mrabarnett/mrab-regex/issues/615): Fix Python API error propagation in match helpers\n\u003cp\u003ePR \u003ca href=\"https://redirect.github.com/mrabarnett/mrab-regex/issues/616\"\u003e#616\u003c/a\u003e: Preserve Python Exceptions in Input Decoding and String Detachment\u003c/p\u003e\n\u003cp\u003ePR \u003ca href=\"https://redirect.github.com/mrabarnett/mrab-regex/issues/617\"\u003e#617\u003c/a\u003e: Prevent Invalid Pointer Use and Exception State Corruption in Byte String Joining\u003c/p\u003e\n\u003cp\u003ePR \u003ca href=\"https://redirect.github.com/mrabarnett/mrab-regex/issues/618\"\u003e#618\u003c/a\u003e: Propagate Allocation and Internal Errors During Pattern Compilation and Scanner Execution\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eVersion: 2026.9.3\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eNew version of cibuildwheel no longer supports building for free-threaded Python 3.13.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.9.2\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eNew version of cibuildwheel no longer needs nor supports cpython-freethreading option.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.9.1\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eUpdated cibuildwheel.\nSupport Python 3.15.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.8.31\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eFixed version.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.8.30\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eGit issue 611: Heap out-of-bounds write at compile time\nGit issue 612: count_one() size underflow through the stale required-string cache\nGit issue 613: (*SKIP) inside an atomic group, plus an equality-only scan stop\nGit issue 614: build_GROUP() does not propagate the match direction\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.8.12\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/0e8cb0596ba6572c66e5d153a1d7c901b381e15e\"\u003e\u003ccode\u003e0e8cb05\u003c/code\u003e\u003c/a\u003e Updated to Unicode 18.0.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/85e568c0e0be620b4ebe50c98ea92415f5995ffc\"\u003e\u003ccode\u003e85e568c\u003c/code\u003e\u003c/a\u003e Git issue 619: \u003ccode\u003eMatch.expand()\u003c/code\u003e segfaults after \u003ccode\u003edetach_string()\u003c/code\u003e when the te...\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mrabarnett/mrab-regex/compare/2026.9.10...2026.9.29\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.16.8 to 0.17.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.17.1\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.17.1\u003c/h2\u003e\n\u003cp\u003e|  File  | Platform | Checksum |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.17.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-09.\u003c/p\u003e\n\u003cp\u003eThe executables in our macOS and Windows release archives and \u003ccode\u003eruff\u003c/code\u003e wheels are now code-signed.\nmacOS executables are signed with an Apple Developer ID certificate and notarized by Apple. Windows\nexecutables have timestamped Authenticode signatures from Azure Artifact Signing. This enables\nverification of the release publisher and binary integrity, supports publisher-based allowlisting,\nand should reduce security warnings and antivirus false positives.\u003c/p\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate the default and latest Python versions for 3.15 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28792\"\u003e#28792\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eRuff now defaults to Python 3.11 instead of 3.10 when no Python version is configured through\n\u003ca href=\"https://docs.astral.sh/ruff/settings/#target-version\"\u003e\u003ccode\u003etarget-version\u003c/code\u003e\u003c/a\u003e or\n\u003ca href=\"https://docs.astral.sh/ruff/configuration/#inferring-the-python-version\"\u003e\u003ccode\u003erequires-python\u003c/code\u003e\u003c/a\u003e. When\nchecking for syntax errors without a configured Python version, Ruff now defaults to Python 3.15\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/astral-sh/ruff/commit/4683270c69cbdaf6ad64d3f983fc458d5a43b41f\"\u003e\u003ccode\u003e4683270\u003c/code\u003e\u003c/a\u003e Bump version to 0.17.1 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29420\"\u003e#29420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3514027edb659bbc3c787d355be9d130e5587f15\"\u003e\u003ccode\u003e3514027\u003c/code\u003e\u003c/a\u003e [ty] Update typing conformance suite pin (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29417\"\u003e#29417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/829455624d78f2e89669e4b4b14af2b96abdb1ae\"\u003e\u003ccode\u003e8294556\u003c/code\u003e\u003c/a\u003e Update referenced PR security-review workflow (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29237\"\u003e#29237\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d1e1b1f69b511df4385f64b510eeec4da01c1a0e\"\u003e\u003ccode\u003ed1e1b1f\u003c/code\u003e\u003c/a\u003e [ty] Preserve recursive aliases when rebuilding intersections (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29057\"\u003e#29057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/93526150df078af7dd8fc4226cdcc469539d2001\"\u003e\u003ccode\u003e9352615\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/83a3afc3156d73ae4296f3fa74ede28e4c72bfcd\"\u003e\u003ccode\u003e83a3afc\u003c/code\u003e\u003c/a\u003e Fix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/b42a8734410230f4529151782cae951b99bed858\"\u003e\u003ccode\u003eb42a873\u003c/code\u003e\u003c/a\u003e [ty] Clarify object attribute write-contract rationale (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29384\"\u003e#29384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d01678ebf594c97a7767d4372061c1f80ae5b5bb\"\u003e\u003ccode\u003ed01678e\u003c/code\u003e\u003c/a\u003e [ty] Clarify object attribute write-contract rationale (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29384\"\u003e#29384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/355b42a7719d8a555e3ee50c89848b42d8a11eb5\"\u003e\u003ccode\u003e355b42a\u003c/code\u003e\u003c/a\u003e [ty] Avoid writable override contracts from object (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29373\"\u003e#29373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e26e6d2a54ac2c5e1f5b1945042de3ff3885bf8e\"\u003e\u003ccode\u003ee26e6d2\u003c/code\u003e\u003c/a\u003e [ty] Collect intersection inference through constraint relations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28677\"\u003e#28677\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.16.8...0.17.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/pedrotramos/BrickFill/pull/7","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrotramos%2FBrickFill/issues/7","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/7/packages"},{"uuid":"5994905600","node_id":"PR_kwDOTZL20M8AAAABKNnXcw","number":104,"state":"open","title":"build: bump the python-production-updates group across 1 directory with 7 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-23T08:57:21.000Z","updated_at":"2026-10-23T09:01:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build: bump","group_name":"python-production-updates","update_count":7,"packages":[{"name":"python-dotenv","old_version":"1.2.3","new_version":"1.2.4","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"typer","old_version":"0.27.2","new_version":"0.27.3","repository_url":"https://github.com/fastapi/typer"},{"name":"tenacity","old_version":"9.1.4","new_version":"9.2.1","repository_url":"https://github.com/jd/tenacity"},{"name":"aiohttp","old_version":"3.14.3","new_version":"3.14.5","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"yaspin","old_version":"3.5.0","new_version":"3.5.1","repository_url":"https://github.com/pavdmyt/yaspin"},{"name":"pyrate-limiter","old_version":"4.5.0","new_version":"4.5.1","repository_url":"https://github.com/vutran1710/PyrateLimiter"},{"name":"pydantic","old_version":"2.13.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-production-updates group with 7 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.3` | `1.2.4` |\n| [typer](https://github.com/fastapi/typer) | `0.27.2` | `0.27.3` |\n| [tenacity](https://github.com/jd/tenacity) | `9.1.4` | `9.2.1` |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.14.3` | `3.14.5` |\n| [yaspin](https://github.com/pavdmyt/yaspin) | `3.5.0` | `3.5.1` |\n| [pyrate-limiter](https://github.com/vutran1710/PyrateLimiter) | `4.5.0` | `4.5.1` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.5` | `2.14.1` |\n\n\nUpdates `python-dotenv` from 1.2.3 to 1.2.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003edotenv get\u003c/code\u003e no longer exits with code 1 for empty string values (\u003ccode\u003eKEY=\u003c/code\u003e) by [\u003ca href=\"https://github.com/ShamikOfficial\"\u003e\u003ccode\u003e@​ShamikOfficial\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAn unquoted empty value followed by an inline comment (e.g. \u003ccode\u003eKEY= # comment\u003c/code\u003e) is now parsed as an empty string instead of the comment text by [\u003ca href=\"https://github.com/Noethix55555\"\u003e\u003ccode\u003e@​Noethix55555\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run --no-override\u003c/code\u003e now expands variable references with the same precedence as \u003ccode\u003eload_dotenv(override=False)\u003c/code\u003e, so a value like \u003ccode\u003e${BASE}/suffix\u003c/code\u003e uses the existing \u003ccode\u003eBASE\u003c/code\u003e from the environment instead of the one from the \u003ccode\u003e.env\u003c/code\u003e file by [\u003ca href=\"https://github.com/ROTl24\"\u003e\u003ccode\u003e@​ROTl24\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\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/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.4] - 2026-10-01\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003edotenv get\u003c/code\u003e no longer exits with code 1 for empty string values (\u003ccode\u003eKEY=\u003c/code\u003e) by [\u003ca href=\"https://github.com/ShamikOfficial\"\u003e\u003ccode\u003e@​ShamikOfficial\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAn unquoted empty value followed by an inline comment (e.g. \u003ccode\u003eKEY= # comment\u003c/code\u003e) is now parsed as an empty string instead of the comment text by [\u003ca href=\"https://github.com/Noethix55555\"\u003e\u003ccode\u003e@​Noethix55555\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run --no-override\u003c/code\u003e now expands variable references with the same precedence as \u003ccode\u003eload_dotenv(override=False)\u003c/code\u003e, so a value like \u003ccode\u003e${BASE}/suffix\u003c/code\u003e uses the existing \u003ccode\u003eBASE\u003c/code\u003e from the environment instead of the one from the \u003ccode\u003e.env\u003c/code\u003e file by [\u003ca href=\"https://github.com/ROTl24\"\u003e\u003ccode\u003e@​ROTl24\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\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/theskumar/python-dotenv/commit/a565c2cc41599c48eabc6b7b7f5b826d43c5a6d7\"\u003e\u003ccode\u003ea565c2c\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.3 → 1.2.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a7abd00261e51baba958e15f443c66165042ea2\"\u003e\u003ccode\u003e4a7abd0\u003c/code\u003e\u003c/a\u003e docs: add 1.2.4 release notes (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f215c0274dc4c310e5ca5feb4c6bddade25ece21\"\u003e\u003ccode\u003ef215c02\u003c/code\u003e\u003c/a\u003e fix: dotenv get exits 0 for empty string values (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/58f2d7c112235b347040bb5cb579d4ebc0a0ad91\"\u003e\u003ccode\u003e58f2d7c\u003c/code\u003e\u003c/a\u003e test: make test_run_with_command_flags portable and meaningful (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/709\"\u003e#709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e0310e5bb3f2b701b11bbc007ca0c82c1bd56f38\"\u003e\u003ccode\u003ee0310e5\u003c/code\u003e\u003c/a\u003e fix: honor --no-override when expanding variables in dotenv run (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/a00cb2eed0704cd6d2071b2004c37e95ccc86ee5\"\u003e\u003ccode\u003ea00cb2e\u003c/code\u003e\u003c/a\u003e docs: add CHANGELOG entry for \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e (fix \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/600\"\u003e#600\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f5485a61eefa5e686d6d5bdc7aa9ad6b104b1e92\"\u003e\u003ccode\u003ef5485a6\u003c/code\u003e\u003c/a\u003e fix: parse empty unquoted value with inline comment as empty string\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.3...v1.2.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typer` from 0.27.2 to 0.27.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/typer/releases\"\u003etyper's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.27.3\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Escape terminal control characters in error messages. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1972\"\u003e#1972\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump pyjwt from 2.13.0 to 2.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1969\"\u003e#1969\u003c/a\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 urllib3 from 2.7.0 to 2.8.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1968\"\u003e#1968\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 11.0 to 11.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1924\"\u003e#1924\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 7 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1966\"\u003e#1966\u003c/a\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 cryptography from 48.0.1 to 50.0.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1920\"\u003e#1920\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1967\"\u003e#1967\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 3 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1965\"\u003e#1965\u003c/a\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 anyio from 4.12.0 to 4.14.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1959\"\u003e#1959\u003c/a\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✅ Fix flaky \u003ccode\u003eapp_dir\u003c/code\u003e and \u003ccode\u003elaunch\u003c/code\u003e tutorial tests under \u003ccode\u003exdist\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1951\"\u003e#1951\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1948\"\u003e#1948\u003c/a\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 annotated-doc from 0.0.4 to 0.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1949\"\u003e#1949\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1950\"\u003e#1950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1947\"\u003e#1947\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/typer/blob/master/docs/release-notes.md\"\u003etyper's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.27.3 (2026-10-06)\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Escape terminal control characters in error messages. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1972\"\u003e#1972\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump pyjwt from 2.13.0 to 2.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1969\"\u003e#1969\u003c/a\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 urllib3 from 2.7.0 to 2.8.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1968\"\u003e#1968\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 11.0 to 11.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1924\"\u003e#1924\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 7 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1966\"\u003e#1966\u003c/a\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 cryptography from 48.0.1 to 50.0.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1920\"\u003e#1920\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1967\"\u003e#1967\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 3 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1965\"\u003e#1965\u003c/a\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 anyio from 4.12.0 to 4.14.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1959\"\u003e#1959\u003c/a\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✅ Fix flaky \u003ccode\u003eapp_dir\u003c/code\u003e and \u003ccode\u003elaunch\u003c/code\u003e tutorial tests under \u003ccode\u003exdist\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1951\"\u003e#1951\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1948\"\u003e#1948\u003c/a\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 annotated-doc from 0.0.4 to 0.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1949\"\u003e#1949\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1950\"\u003e#1950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1947\"\u003e#1947\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/b15210b71a5b9b35be82a1ffdb172ef7b3a89d85\"\u003e\u003ccode\u003eb15210b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.27.3 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1973\"\u003e#1973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/8bfe6d1599d19fd2175722dc9b9cb576e331c43d\"\u003e\u003ccode\u003e8bfe6d1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/a74010f845e8771e574cc9a033cd53f449383c61\"\u003e\u003ccode\u003ea74010f\u003c/code\u003e\u003c/a\u003e 🐛 Escape terminal control characters in error messages (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1972\"\u003e#1972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/11b083b92126fb8e149ab9e7d5c9a0f5594dfe58\"\u003e\u003ccode\u003e11b083b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/910a474f3071012c3c512aad3b6e10c6e9af9dcf\"\u003e\u003ccode\u003e910a474\u003c/code\u003e\u003c/a\u003e ⬆ Bump pyjwt from 2.13.0 to 2.15.0 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1969\"\u003e#1969\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/33b1eec0e20df3695de0b4ad7af0dff89608b12b\"\u003e\u003ccode\u003e33b1eec\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/62f1d4acd95c52c12490d313d2dea27846d23f46\"\u003e\u003ccode\u003e62f1d4a\u003c/code\u003e\u003c/a\u003e ⬆ Bump urllib3 from 2.7.0 to 2.8.0 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1968\"\u003e#1968\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/ffc8b9ae61d98fd48d52494e3f7286fda763fbe5\"\u003e\u003ccode\u003effc8b9a\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/1b7ceee5da625df3c679a55f9e6d25e31ab5f5c2\"\u003e\u003ccode\u003e1b7ceee\u003c/code\u003e\u003c/a\u003e ⬆ Bump pymdown-extensions from 11.0 to 11.0.1 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1924\"\u003e#1924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/40c39c11ce29ea0272134a0a50b2668105cd714f\"\u003e\u003ccode\u003e40c39c1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/typer/compare/0.27.2...0.27.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tenacity` from 9.1.4 to 9.2.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jd/tenacity/releases\"\u003etenacity's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.2.1\u003c/h2\u003e\n\u003cp\u003e9.2.0 was tagged but never reached PyPI: the upload rejected its package description (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/714\"\u003e#714\u003c/a\u003e). 9.2.1 is the first release on PyPI with everything in \u003ca href=\"https://github.com/jd/tenacity/releases/tag/9.2.0\"\u003e9.2.0\u003c/a\u003e, plus the changes below.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore(mypy): drop vestigial tornado ignore_missing_imports override by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/676\"\u003ejd/tenacity#676\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: annotate wait_base.\u003cstrong\u003eradd\u003c/strong\u003e as taking the int seed from sum() by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/677\"\u003ejd/tenacity#677\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(mypy): enable the strictness options \u003ccode\u003estrict\u003c/code\u003e leaves off by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/678\"\u003ejd/tenacity#678\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: drop always-true truthiness checks and enable truthy-bool by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/679\"\u003ejd/tenacity#679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: declare BaseAction's REPR_FIELDS and NAME as ClassVar by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/680\"\u003ejd/tenacity#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: fix possibly-undefined and deprecated call sites by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/681\"\u003ejd/tenacity#681\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: mark overridden methods with \u003ca href=\"https://github.com/override\"\u003e\u003ccode\u003e@​override\u003c/code\u003e\u003c/a\u003e by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/682\"\u003ejd/tenacity#682\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: restore support for falsy wait values and callable + strategy by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/694\"\u003ejd/tenacity#694\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: read the tornado global live instead of an import-time snapshot by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/696\"\u003ejd/tenacity#696\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect enabled=False on the direct-call path by \u003ca href=\"https://github.com/mahirhir\"\u003e\u003ccode\u003e@​mahirhir\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/645\"\u003ejd/tenacity#645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: only treat None and 0 as \u0026quot;no wait\u0026quot; by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/741\"\u003ejd/tenacity#741\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: restore PyPI-compatible package description by \u003ca href=\"https://github.com/arindamsikder\"\u003e\u003ccode\u003e@​arindamsikder\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/725\"\u003ejd/tenacity#725\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: check built distributions with twine by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/742\"\u003ejd/tenacity#742\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/mahirhir\"\u003e\u003ccode\u003e@​mahirhir\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/645\"\u003ejd/tenacity#645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kozlek\"\u003e\u003ccode\u003e@​kozlek\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/733\"\u003ejd/tenacity#733\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/arindamsikder\"\u003e\u003ccode\u003e@​arindamsikder\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/725\"\u003ejd/tenacity#725\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jd/tenacity/compare/9.2.0...9.2.1\"\u003ehttps://github.com/jd/tenacity/compare/9.2.0...9.2.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e9.2.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix ordinal suffix generation for large numbers ending in 11, 12, 13 by \u003ca href=\"https://github.com/ArmaanjeetSandhu\"\u003e\u003ccode\u003e@​ArmaanjeetSandhu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/556\"\u003ejd/tenacity#556\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: replace tox with poethepoet + uv by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/558\"\u003ejd/tenacity#558\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix README badges by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/559\"\u003ejd/tenacity#559\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add project URLs to pyproject.toml by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/560\"\u003ejd/tenacity#560\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add local dev commands to contribute section by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/561\"\u003ejd/tenacity#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: modernize async examples by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/562\"\u003ejd/tenacity#562\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: set version in sphinx conf by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/563\"\u003ejd/tenacity#563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve tornado mypy errors instead of suppressing them by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/568\"\u003ejd/tenacity#568\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add poe fmt task for auto-formatting by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/569\"\u003ejd/tenacity#569\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: replace curio example with trio by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/570\"\u003ejd/tenacity#570\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: enable ruff I, UP, B rules and auto-fix codebase by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/571\"\u003ejd/tenacity#571\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: harden release workflow by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/575\"\u003ejd/tenacity#575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use typing.Self on Python 3.11+ instead of typing_extensions by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/576\"\u003ejd/tenacity#576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump tornado version floor to \u0026gt;=6.0 by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/578\"\u003ejd/tenacity#578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clean up sphinx conf.py by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/579\"\u003ejd/tenacity#579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove stale noqa comments from \u003cstrong\u003einit\u003c/strong\u003e.py by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/577\"\u003ejd/tenacity#577\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: enable additional ruff rules and fix violations by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/584\"\u003ejd/tenacity#584\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: enable mypy strict mode in all test files by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/585\"\u003ejd/tenacity#585\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: make LoggerProtocol compatible with logging.Logger by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/586\"\u003ejd/tenacity#586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove unused IterState.delay_since_first_attempt field by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/587\"\u003ejd/tenacity#587\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove redundant raise before reraise() by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/588\"\u003ejd/tenacity#588\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: replace deprecated typing.Pattern with re.Pattern by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/589\"\u003ejd/tenacity#589\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix typos in docstrings by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/590\"\u003ejd/tenacity#590\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/jd/tenacity/commit/4410996dd9a96864a2733ce0778bcaa112b72811\"\u003e\u003ccode\u003e4410996\u003c/code\u003e\u003c/a\u003e ci: check built distributions with twine (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/b23844175feb8c62f4ebb0ef0833d993f439fa1f\"\u003e\u003ccode\u003eb238441\u003c/code\u003e\u003c/a\u003e fix: restore PyPI-compatible package description (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/b6201eceedfc719e996dcbc3f6c17f21011fb236\"\u003e\u003ccode\u003eb6201ec\u003c/code\u003e\u003c/a\u003e fix: only treat None and 0 as \u0026quot;no wait\u0026quot; (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/4a74682e0186b5f2d25906aa190cd639c705a958\"\u003e\u003ccode\u003e4a74682\u003c/code\u003e\u003c/a\u003e ci: drop the Mergify queue rule (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/739\"\u003e#739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/91169719f4fd127d680cafe026f1f95f04292094\"\u003e\u003ccode\u003e9116971\u003c/code\u003e\u003c/a\u003e ci: drop Mergify dismiss_reviews rule (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/737\"\u003e#737\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/2374b61424aab29769c3428b06d576ffc1a5a1d9\"\u003e\u003ccode\u003e2374b61\u003c/code\u003e\u003c/a\u003e ci: rely on the ruleset for the ci-gate check (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/736\"\u003e#736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/6df1aab1a2df84f2779f5f308c6171df9d051a35\"\u003e\u003ccode\u003e6df1aab\u003c/code\u003e\u003c/a\u003e ci: gate merges on a single ci-gate job (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/734\"\u003e#734\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/5f540fad77cbd90b4bcb21a9b859d5b07c08ba54\"\u003e\u003ccode\u003e5f540fa\u003c/code\u003e\u003c/a\u003e chore(mergify): replace deprecated autoqueue with auto_merge_conditions (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/8be01b1daf2010566fd936a5c2214efefa43edff\"\u003e\u003ccode\u003e8be01b1\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump ruff from 0.16.5 to 0.16.9 in the python group (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/3e58094d3bc414975aad9eadf343a32bdb3b89b3\"\u003e\u003ccode\u003e3e58094\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump the python group with 2 updates (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/707\"\u003e#707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jd/tenacity/compare/9.1.4...9.2.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `aiohttp` from 3.14.3 to 3.14.5\nUpdates `yaspin` from 3.5.0 to 3.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pavdmyt/yaspin/releases\"\u003eyaspin's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.5.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eci: add Python 3.15-dev to the version matrix by \u003ca href=\"https://github.com/pavdmyt\"\u003e\u003ccode\u003e@​pavdmyt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pavdmyt/yaspin/pull/274\"\u003epavdmyt/yaspin#274\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: prevent hidden spinner frame race by \u003ca href=\"https://github.com/pavdmyt\"\u003e\u003ccode\u003e@​pavdmyt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pavdmyt/yaspin/pull/275\"\u003epavdmyt/yaspin#275\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pavdmyt/yaspin/compare/v3.5.0...v3.5.1\"\u003ehttps://github.com/pavdmyt/yaspin/compare/v3.5.0...v3.5.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/pavdmyt/yaspin/blob/master/HISTORY.rst\"\u003eyaspin's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.5.1 / 2026-09-18\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent a stale spinner frame from being written after \u003ccode\u003ehide()\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/pavdmyt/yaspin/commit/7db744cd0478fd1f4bfbdb0201bad1253fecb13b\"\u003e\u003ccode\u003e7db744c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pavdmyt/yaspin/issues/276\"\u003e#276\u003c/a\u003e from pavdmyt/version_3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pavdmyt/yaspin/commit/340c07f3d67783f2bea78280bacaad73310cc9a1\"\u003e\u003ccode\u003e340c07f\u003c/code\u003e\u003c/a\u003e release: bump version, update history\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pavdmyt/yaspin/commit/fd62d36639fa54935e9ff205bddaf03a1736f50e\"\u003e\u003ccode\u003efd62d36\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pavdmyt/yaspin/issues/275\"\u003e#275\u003c/a\u003e from pavdmyt/pavdmyt/fix-hidden-spinner-race_20260918\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pavdmyt/yaspin/commit/913a532256d74be89b6841d90b734e229031ef44\"\u003e\u003ccode\u003e913a532\u003c/code\u003e\u003c/a\u003e fix: prevent hidden spinner frame race\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pavdmyt/yaspin/commit/4243ba16500f6754cbfcd7d24629f559bae49eba\"\u003e\u003ccode\u003e4243ba1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pavdmyt/yaspin/issues/274\"\u003e#274\u003c/a\u003e from pavdmyt/pavdmyt/add-python-3.15-dev-in-ci_20260917\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pavdmyt/yaspin/commit/2af4efebf5745fbd8d03448cbe41be1e5c0848a6\"\u003e\u003ccode\u003e2af4efe\u003c/code\u003e\u003c/a\u003e ci: isolate semgrep from Python version jobs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pavdmyt/yaspin/commit/adf0d06317e0c740efea9d6b77d19790eb2f3ba8\"\u003e\u003ccode\u003eadf0d06\u003c/code\u003e\u003c/a\u003e ci: enable PyO3 prerelease compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pavdmyt/yaspin/commit/7dc35f17c741be32a8562f10f0cb9731e82de59e\"\u003e\u003ccode\u003e7dc35f1\u003c/code\u003e\u003c/a\u003e ci: add Python 3.15-dev to the version matrix\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pavdmyt/yaspin/compare/v3.5.0...v3.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyrate-limiter` from 4.5.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/vutran1710/PyrateLimiter/releases\"\u003epyrate-limiter's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.5.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: close buckets in BucketFactory.close() by \u003ca href=\"https://github.com/ArmaanjeetSandhu\"\u003e\u003ccode\u003e@​ArmaanjeetSandhu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/314\"\u003evutran1710/PyrateLimiter#314\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(limiter): as_decorator silently ran the wrapped function when denied by \u003ca href=\"https://github.com/si-kui-a\"\u003e\u003ccode\u003e@​si-kui-a\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/315\"\u003evutran1710/PyrateLimiter#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStabilize SQLite-backed tests on Python 3.14t by closing leaked test resources by \u003ca href=\"https://github.com/vutran1710\"\u003e\u003ccode\u003e@​vutran1710\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/316\"\u003evutran1710/PyrateLimiter#316\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix async wrapper waits for state buckets by \u003ca href=\"https://github.com/bensynapse\"\u003e\u003ccode\u003e@​bensynapse\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/317\"\u003evutran1710/PyrateLimiter#317\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBenchmark weighted Redis put latency by \u003ca href=\"https://github.com/amir-h-rassafi\"\u003e\u003ccode\u003e@​amir-h-rassafi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/306\"\u003evutran1710/PyrateLimiter#306\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(postgres): read peeked timestamps through the session time zone by \u003ca href=\"https://github.com/ZacKienzle2\"\u003e\u003ccode\u003e@​ZacKienzle2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/321\"\u003evutran1710/PyrateLimiter#321\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(postgres): key the table-creation advisory lock by CRC-32, not hash() by \u003ca href=\"https://github.com/ZacKienzle2\"\u003e\u003ccode\u003e@​ZacKienzle2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/320\"\u003evutran1710/PyrateLimiter#320\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix stale timestamps after async limiter waits by \u003ca href=\"https://github.com/PLPeeters\"\u003e\u003ccode\u003e@​PLPeeters\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/318\"\u003evutran1710/PyrateLimiter#318\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/ArmaanjeetSandhu\"\u003e\u003ccode\u003e@​ArmaanjeetSandhu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/314\"\u003evutran1710/PyrateLimiter#314\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/si-kui-a\"\u003e\u003ccode\u003e@​si-kui-a\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/315\"\u003evutran1710/PyrateLimiter#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bensynapse\"\u003e\u003ccode\u003e@​bensynapse\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/317\"\u003evutran1710/PyrateLimiter#317\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ZacKienzle2\"\u003e\u003ccode\u003e@​ZacKienzle2\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/321\"\u003evutran1710/PyrateLimiter#321\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PLPeeters\"\u003e\u003ccode\u003e@​PLPeeters\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/318\"\u003evutran1710/PyrateLimiter#318\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/vutran1710/PyrateLimiter/compare/v4.5.0...v4.5.1\"\u003ehttps://github.com/vutran1710/PyrateLimiter/compare/v4.5.0...v4.5.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/vutran1710/PyrateLimiter/blob/master/CHANGELOG.md\"\u003epyrate-limiter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[4.5.1]\u003c/h2\u003e\n\u003cp\u003eBug fixes only. One behaviour change to note: a decorated call that the limiter\ncan never admit now raises instead of running (see the first entry).\u003c/p\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eas_decorator\u003c/code\u003e ran the wrapped function even when denied.\u003c/strong\u003e Both the sync\nand async wrappers discarded the result of \u003ccode\u003etry_acquire()\u003c/code\u003e and called the\nfunction unconditionally. With the default \u003ccode\u003eblocking=True, timeout=-1\u003c/code\u003e that\nresult is only \u003ccode\u003eFalse\u003c/code\u003e when the weight can never be admitted under the\nconfigured rates (e.g. \u003ccode\u003eweight=5\u003c/code\u003e on \u003ccode\u003eRate(2, Duration.SECOND)\u003c/code\u003e), so the\nlimiter's verdict was silently bypassed. Such calls now raise \u003ccode\u003eRuntimeError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eLimiter.close()\u003c/code\u003e never closed its buckets.\u003c/strong\u003e \u003ccode\u003eBucketFactory.close()\u003c/code\u003e read\nthe bucket list off the leaker after tearing the leaker down, so it always\niterated an empty list: SQLite connections and Postgres connection pools\nstayed open. It now snapshots the buckets first. \u003ccode\u003eSingleBucketFactory\u003c/code\u003e also\ncloses its bucket when no leak was ever scheduled; factories that hold buckets\noutside the leaker can extend the new \u003ccode\u003eBucketFactory.owned_buckets()\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAsync wrappers lost \u003ccode\u003eStateBucket\u003c/code\u003e waits.\u003c/strong\u003e \u003ccode\u003eBucketAsyncWrapper.waiting()\u003c/code\u003e\ncalled the generic log-bucket implementation instead of the wrapped bucket's,\nso GCRA / \u003ccode\u003eTokenBucket\u003c/code\u003e waits came back as \u003ccode\u003e-1\u003c/code\u003e or \u003ccode\u003e0\u003c/code\u003e. An admissible request\ncould be rejected outright, or a blocking limiter could retry without waiting.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAsync blocking retries recorded stale timestamps.\u003c/strong\u003e After an async wait the\nretry loop advanced the item's timestamp by the requested delay only. A late\nwake-up therefore recorded the acquisition in the past and let later requests\nthrough early. The timestamp is now re-read from the bucket factory's clock,\nand the deadline is enforced around the whole retry loop.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePostgresBucket\u003c/strong\u003e: the advisory lock that serialises table creation is now\nkeyed by a CRC-32 of the table name rather than \u003ccode\u003ehash()\u003c/code\u003e, which Python salts\nper interpreter. Processes sharing a database took different locks, so their\nconcurrent \u003ccode\u003eCREATE TABLE IF NOT EXISTS\u003c/code\u003e could fail with \u003ccode\u003eUniqueViolation\u003c/code\u003e on\n\u003ccode\u003epg_type_typname_nsp_index\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePostgresBucket.peek\u003c/code\u003e read timestamps as UTC.\u003c/strong\u003e The \u003ccode\u003eitem_timestamp\u003c/code\u003e column\nis a \u003ccode\u003eTIMESTAMP\u003c/code\u003e that \u003ccode\u003eTO_TIMESTAMP\u003c/code\u003e fills through the session time zone, but\n\u003ccode\u003epeek\u003c/code\u003e took its epoch as if it were UTC. Outside UTC every peeked item sat the\nzone's offset in the future, so a full bucket computed a wait of that many\nhours and blocking callers slept through it. \u003ccode\u003epeek\u003c/code\u003e now casts the column back\nthrough the session zone.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/968301de411f722235c6db152a55fa4ea77fd3c7\"\u003e\u003ccode\u003e968301d\u003c/code\u003e\u003c/a\u003e docs: changelog for v4.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/db793340ab218442091aeeaabf375fabf9fc1cdf\"\u003e\u003ccode\u003edb79334\u003c/code\u003e\u003c/a\u003e fix: refresh async retry timestamps without an extra task handoff (\u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/issues/318\"\u003e#318\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/e9c265002da6b59c92a14780d98ce084d06a4703\"\u003e\u003ccode\u003ee9c2650\u003c/code\u003e\u003c/a\u003e fix(postgres): key the table-creation advisory lock by CRC-32, not hash() (\u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/issues/320\"\u003e#320\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/3c2c03e495c0b9dcadeed5c496721d1e0d46cf25\"\u003e\u003ccode\u003e3c2c03e\u003c/code\u003e\u003c/a\u003e fix(postgres): read peeked timestamps through the session time zone (\u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/issues/321\"\u003e#321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/71f39c03aa82f0c27add10c16d10292116bfe1aa\"\u003e\u003ccode\u003e71f39c0\u003c/code\u003e\u003c/a\u003e Benchmark weighted Redis put latency (\u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/issues/306\"\u003e#306\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/4de308880723ca77480a556e6dd85accf854b306\"\u003e\u003ccode\u003e4de3088\u003c/code\u003e\u003c/a\u003e fix: preserve state bucket waits in async wrappers (\u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/issues/317\"\u003e#317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/211f6ffa6fef6b9852baf7d6ac8a3524e3aad27b\"\u003e\u003ccode\u003e211f6ff\u003c/code\u003e\u003c/a\u003e Stabilize SQLite-backed tests on Python 3.14t by closing leaked test resource...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/bdfa7e21e013a183b6a7928fd07d08c06633bf8f\"\u003e\u003ccode\u003ebdfa7e2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/issues/315\"\u003e#315\u003c/a\u003e from si-kui-a/fix/decorator-silent-bypass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/a1f69226680d3a38db7d4dc60f98ee8ae05834ba\"\u003e\u003ccode\u003ea1f6922\u003c/code\u003e\u003c/a\u003e fix(limiter): as_decorator silently ran the wrapped function when denied\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/036e2c12500df6466a82e1d7fe0b330154f0b4f9\"\u003e\u003ccode\u003e036e2c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/issues/314\"\u003e#314\u003c/a\u003e from ArmaanjeetSandhu/fix/close-buckets\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/vutran1710/PyrateLimiter/compare/v4.5.0...v4.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...v2.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/deepset-ai/haystack-enterprise-sdk/pull/104","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepset-ai%2Fhaystack-enterprise-sdk/issues/104","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/104/packages"},{"uuid":"5993439340","node_id":"PR_kwDOOBrOOM8AAAABKMciPQ","number":990,"state":"open","title":"fix(deps): Bump the patch-and-minor group in /fast_api_voter with 21 updates","user":"dependabot[bot]","labels":["dependencies","python","queued","security"],"assignees":[],"locked":false,"comments_count":5,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-23T07:00:18.000Z","updated_at":"2026-10-24T02:37:57.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"fix(deps): Bump","group_name":"patch-and-minor","update_count":21,"packages":[{"name":"fastapi","old_version":"0.143.0","new_version":"0.143.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"httptools","old_version":"0.8.0","new_version":"0.9.0","repository_url":"https://github.com/MagicStack/httptools"},{"name":"numpy","old_version":"2.5.3","new_version":"2.5.4","repository_url":"https://github.com/numpy/numpy"},{"name":"pydantic","old_version":"2.14.0","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.15.0","new_version":"2.16.0","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"sentry-sdk","old_version":"2.71.0","new_version":"2.72.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"starlette","old_version":"1.7.0","new_version":"1.8.0","repository_url":"https://github.com/Kludex/starlette"},{"name":"wrapt","old_version":"2.5.0","new_version":"2.5.1","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"aiohttp","old_version":"3.14.4","new_version":"3.14.5","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"hypothesis","old_version":"6.168.5","new_version":"6.170.0","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ruff","old_version":"0.16.10","new_version":"0.17.1","repository_url":"https://github.com/astral-sh/ruff"},{"name":"schemathesis","old_version":"4.30.0","new_version":"4.31.1","repository_url":"https://github.com/schemathesis/schemathesis"},{"name":"z3-solver","old_version":"5.1.0.0","new_version":"5.3.1.0","repository_url":"https://github.com/Z3Prover/z3"},{"name":"ast-serialize","old_version":"0.12.1","new_version":"0.13.0","repository_url":"https://github.com/mypyc/ast_serialize"},{"name":"filelock","old_version":"4.0.12","new_version":"4.2.0","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"jedi","old_version":"0.20.0","new_version":"0.20.1","repository_url":"https://github.com/davidhalter/jedi"},{"name":"markdown","old_version":"3.11","new_version":"3.11.1","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"narwhals","old_version":"2.26.0","new_version":"2.27.1","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"platformdirs","old_version":"4.12.4","new_version":"4.13.3","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"pluggy","old_version":"1.6.0","new_version":"1.7.0","repository_url":"https://github.com/pytest-dev/pluggy"},{"name":"tomlkit","old_version":"0.15.1","new_version":"0.15.2","repository_url":"https://github.com/python-poetry/tomlkit"}],"path":"/fast_api_voter","ecosystem":"pip"},"body":"Bumps the patch-and-minor group in /fast_api_voter with 21 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.143.0` | `0.143.2` |\n| [httptools](https://github.com/MagicStack/httptools) | `0.8.0` | `0.9.0` |\n| [numpy](https://github.com/numpy/numpy) | `2.5.3` | `2.5.4` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.14.0` | `2.14.1` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.15.0` | `2.16.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.71.0` | `2.72.0` |\n| [starlette](https://github.com/Kludex/starlette) | `1.7.0` | `1.8.0` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `2.5.0` | `2.5.1` |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.14.4` | `3.14.5` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.168.5` | `6.170.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.10` | `0.17.1` |\n| [schemathesis](https://github.com/schemathesis/schemathesis) | `4.30.0` | `4.31.1` |\n| [z3-solver](https://github.com/Z3Prover/z3) | `5.1.0.0` | `5.3.1.0` |\n| [ast-serialize](https://github.com/mypyc/ast_serialize) | `0.12.1` | `0.13.0` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `4.0.12` | `4.2.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.20.0` | `0.20.1` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.11` | `3.11.1` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.26.0` | `2.27.1` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.12.4` | `4.13.3` |\n| [pluggy](https://github.com/pytest-dev/pluggy) | `1.6.0` | `1.7.0` |\n| [tomlkit](https://github.com/python-poetry/tomlkit) | `0.15.1` | `0.15.2` |\n\nUpdates `fastapi` from 0.143.0 to 0.143.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.143.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix blocking frontend fallback file checks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16503\"\u003e#16503\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16500\"\u003e#16500\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16499\"\u003e#16499\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16501\"\u003e#16501\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16498\"\u003e#16498\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16497\"\u003e#16497\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16495\"\u003e#16495\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16496\"\u003e#16496\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16493\"\u003e#16493\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16494\"\u003e#16494\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16490\"\u003e#16490\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16491\"\u003e#16491\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16492\"\u003e#16492\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump pydantic-ai-slim from 2.49.0 to 2.53.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16487\"\u003e#16487\u003c/a\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 werkzeug from 3.1.6 to 3.1.9. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16464\"\u003e#16464\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.143.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix included route metadata in \u003ccode\u003eiter_route_contexts()\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16484\"\u003e#16484\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ba24dc3bc011bad3efdbd68b9d529faae2c2993c\"\u003e\u003ccode\u003eba24dc3\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.143.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16504\"\u003e#16504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/98050eeaf006cf26e9a8b7f83d26fe00d74091ba\"\u003e\u003ccode\u003e98050ee\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/d0282a388b3875dfdfd69813693608676006254f\"\u003e\u003ccode\u003ed0282a3\u003c/code\u003e\u003c/a\u003e 🐛 Fix blocking frontend fallback file checks (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16503\"\u003e#16503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/db04f5b7ed05e3408be73d2c62ae04653be3b3fb\"\u003e\u003ccode\u003edb04f5b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/fd0614cac4c5eb57e08ba82c63be0824453dafe2\"\u003e\u003ccode\u003efd0614c\u003c/code\u003e\u003c/a\u003e 🌐 Update translations for zh-hant (update-outdated) (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16500\"\u003e#16500\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0c83cfae23d8068c9a3a5151ae69cac2e4e894d9\"\u003e\u003ccode\u003e0c83cfa\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/6955ff746c204465ccbc8d648d86f5545a3bb55f\"\u003e\u003ccode\u003e6955ff7\u003c/code\u003e\u003c/a\u003e 🌐 Update translations for ja (update-outdated) (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16499\"\u003e#16499\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/aa1c3bac294c51b99728ef155d99569047598e04\"\u003e\u003ccode\u003eaa1c3ba\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/f6f33b2cb225ce981ddfefcb869c000d945062c6\"\u003e\u003ccode\u003ef6f33b2\u003c/code\u003e\u003c/a\u003e 🌐 Update translations for zh (update-outdated) (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16501\"\u003e#16501\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0474a7e88d7f294cc0985bea0913bbafbb7a8a66\"\u003e\u003ccode\u003e0474a7e\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.143.0...0.143.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httptools` from 0.8.0 to 0.9.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.9.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpgrade llhttp to 9.4.3 (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/153\"\u003e#153\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in eab7f640)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBuild CPython 3.15 wheels (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/148\"\u003e#148\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e in b03516d9)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd RISC-V 64-bit wheels (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/137\"\u003e#137\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/gounthar\"\u003e\u003ccode\u003e@​gounthar\u003c/code\u003e\u003c/a\u003e in 1c6946dc)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd Windows ARM64 support in CI (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/141\"\u003e#141\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/Harishmcw\"\u003e\u003ccode\u003e@​Harishmcw\u003c/code\u003e\u003c/a\u003e in 5a2bb07c)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBuild PPC64LE wheels (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/143\"\u003e#143\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/Sunidhi-Gaonkar1\"\u003e\u003ccode\u003e@​Sunidhi-Gaonkar1\u003c/code\u003e\u003c/a\u003e in ff08b99d)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModernize test and release workflows (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/152\"\u003e#152\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in d80e26fe)\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/104198474662752f4f4845c79007100829aff442\"\u003e\u003ccode\u003e1041984\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/154\"\u003e#154\u003c/a\u003e from MagicStack/release-0.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/aa5fbf941f2e58e0b3edc408b01eb49aadcca414\"\u003e\u003ccode\u003eaa5fbf9\u003c/code\u003e\u003c/a\u003e httptools v0.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/eab7f6403887a8881ffca3a65095c317e03b02ea\"\u003e\u003ccode\u003eeab7f64\u003c/code\u003e\u003c/a\u003e Upgrade llhttp to 9.4.3 (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/153\"\u003e#153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/d80e26fe6dcc181ebd65e7a3da17448ccc5abdf4\"\u003e\u003ccode\u003ed80e26f\u003c/code\u003e\u003c/a\u003e Modernize test and release workflows (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/152\"\u003e#152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/b03516d983ac04cec750ece237cbf07cefb87900\"\u003e\u003ccode\u003eb03516d\u003c/code\u003e\u003c/a\u003e Build CPython 3.15 wheels (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/148\"\u003e#148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/ff08b99df42e957c5cfb9cddeb85ffa8378e09ca\"\u003e\u003ccode\u003eff08b99\u003c/code\u003e\u003c/a\u003e Build PPC64LE wheels (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/143\"\u003e#143\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/5a2bb07cc2be05558d692adff10e223a1e6c3bf3\"\u003e\u003ccode\u003e5a2bb07\u003c/code\u003e\u003c/a\u003e Add Windows ARM64 support in CI (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/141\"\u003e#141\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/1c6946dccdffcb7818c19ddd8bf73123b4ccd297\"\u003e\u003ccode\u003e1c6946d\u003c/code\u003e\u003c/a\u003e ci: add riscv64 to wheel build matrix (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/137\"\u003e#137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/MagicStack/httptools/compare/v0.8.0...v0.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `numpy` from 2.5.3 to 2.5.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/releases\"\u003enumpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.5.4 (Oct 10,  2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.5.4 Release Notes\u003c/h1\u003e\n\u003cp\u003e\u003cem\u003eReleased on 2026-10-10.\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eNumPy 2.5.4 is a patch release that fixes bugs discovered after the 2.5.3\nrelease. Highlights are:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMany typing fixes and improvements,\u003c/li\u003e\n\u003cli\u003eA workaround for the MSVC 19.51 bug, see below.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThis release supports Python versions 3.12-3.15.\u003c/p\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003enumpy.linalg.svd\u003c/code\u003e and \u003ccode\u003enumpy.linalg.lstsq\u003c/code\u003e now raise for inputs containing\ninfinities instead of returning garbage results.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed hangs in \u003ccode\u003enumpy.linalg.svd\u003c/code\u003e and \u003ccode\u003enumpy.linalg.lstsq\u003c/code\u003e for certain inputs\ncontaining infinities for recent versions of some LAPACK implementations.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003enumpy.linalg.cond\u003c/code\u003e now handles non-finite inputs more consistently.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32593\"\u003egh-32593\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eStringDType hashing with NaN sentinels\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eStringDType\u003c/code\u003e instances with equivalent floating-point NaN sentinels now\nhave equal hashes. Previously, distinct NaN objects could produce equal\ndtype instances with different hashes, causing dictionary lookups and set\ndeduplication to fail.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32563\"\u003egh-32563\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003ch3\u003e\u003ccode\u003eMaskedArray\u003c/code\u003e resets a fill_value that cannot be represented in a new dtype\u003c/h3\u003e\n\u003cp\u003eA fill_value copied from a source array is now reset to the default fill_value\nfor the new dtype when it cannot be represented in that dtype. Previously the\ncopied value could be stale: ufuncs that change dtype left the result holding a\nfill_value typed for the old dtype, which raised a \u003ccode\u003eTypeError\u003c/code\u003e only when\nsomething later validated it (such as \u003ccode\u003e.view()\u003c/code\u003e), and a floating point\nfill_value that overflows an integer dtype was kept as an out-of-range value\ntogether with a \u003ccode\u003eRuntimeWarning\u003c/code\u003e. Both now fall back to the default,\nincluding when a masked array is passed to \u003ccode\u003eMaskedArray\u003c/code\u003e with a different\n\u003ccode\u003edtype\u003c/code\u003e. A fill_value given explicitly by the user is still validated and\nraises as before. This can now raise a \u003ccode\u003eComplexWarning\u003c/code\u003e if the fill_value is\ncomplex and the new dtype is real.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/a3d0ef1df045b858e68115001fdabc930bb3b68c\"\u003e\u003ccode\u003ea3d0ef1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32969\"\u003e#32969\u003c/a\u003e from charris/prepare-2.5.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/087b5367c84b5296c32c26c415438d87d3888586\"\u003e\u003ccode\u003e087b536\u003c/code\u003e\u003c/a\u003e MAINT: Make OpenBLAS version check use 2.5.x branch.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/91acd879242a679604579895d490c26f864a4b03\"\u003e\u003ccode\u003e91acd87\u003c/code\u003e\u003c/a\u003e REL: Prepare for the NumPy 2.5.4 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/9cc555bae07244551829c3a4eb7a635bef6345b3\"\u003e\u003ccode\u003e9cc555b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32956\"\u003e#32956\u003c/a\u003e from charris/backport-typing-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/e04b972a306136b8ac9219be199948badafa3475\"\u003e\u003ccode\u003ee04b972\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003edtype[void].names\u003c/code\u003e: allow setting with list (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32943\"\u003e#32943\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/d9299693d20c3fd1aa83b9464d074632cf59aaac\"\u003e\u003ccode\u003ed929969\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003etimedelta64\u003c/code\u003e: \u003ccode\u003edatetime.timedelta\u003c/code\u003e construction isn't deprecated (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/839467fdbcc1d68b68f4fe2a61d3387107c78394\"\u003e\u003ccode\u003e839467f\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003ema.getmaskarray\u003c/code\u003e: accept array-likes (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32934\"\u003e#32934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/64b721b23f51543ed9316a5fd21a48734760b429\"\u003e\u003ccode\u003e64b721b\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003epolynomial\u003c/code\u003e: accept scalar \u003ccode\u003ecoef\u003c/code\u003e in the poly constructors (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32931\"\u003e#32931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/06b7ad226e41b71919b2d35c50063998eced0b9d\"\u003e\u003ccode\u003e06b7ad2\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003evoid\u003c/code\u003e: accept any \u003ccode\u003edtype: str\u003c/code\u003e in constructor calls (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32928\"\u003e#32928\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/c7bcd2c0aaca732b87575829cc61508076de1af5\"\u003e\u003ccode\u003ec7bcd2c\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003eplace\u003c/code\u003e: widen \u003ccode\u003emask\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32926\"\u003e#32926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/numpy/numpy/compare/v2.5.3...v2.5.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\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/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic/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-settings` from 2.15.0 to 2.16.0\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.16.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBreaking changes and behavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.10 is no longer supported\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1003\"\u003e#1003\u003c/a\u003e). pydantic-settings now requires Python 3.11+, since 3.10 reaches end of life this month. The \u003ccode\u003etomli\u003c/code\u003e fallback is gone in favor of stdlib \u003ccode\u003etomllib\u003c/code\u003e; the \u003ccode\u003etoml\u003c/code\u003e extra is kept as an empty extra so \u003ccode\u003epip install pydantic-settings[toml]\u003c/code\u003e keeps working.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003epython-dotenv\u0026gt;=1.2.2\u003c/code\u003e is now required\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/971\"\u003e#971\u003c/a\u003e) to pick up the fix for CVE-2026-28684.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAliases are ignored in every source when \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1033\"\u003e#1033\u003c/a\u003e). Env vars, secrets, CLI flags and defaults now use only field names, matching pydantic. An env var named after the alias is now ignored instead of raising \u003ccode\u003eextra_forbidden\u003c/code\u003e, and the CLI exposes \u003ccode\u003e--apple\u003c/code\u003e rather than \u003ccode\u003e--pomo\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003evalidation_alias\u003c/code\u003e takes precedence over \u003ccode\u003ealias\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1038\"\u003e#1038\u003c/a\u003e). When the two differ, values from JSON/YAML/TOML files and the CLI were silently ignored; they now load. CLI help lists the \u003ccode\u003evalidation_alias\u003c/code\u003e flag first, and \u003ccode\u003eCliApp.serialize\u003c/code\u003e emits it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCLI case-insensitivity only lowercases registered options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1036\"\u003e#1036\u003c/a\u003e). With \u003ccode\u003ecase_sensitive=False\u003c/code\u003e, args after \u003ccode\u003e--\u003c/code\u003e and those captured by \u003ccode\u003eCliUnknownArgs\u003c/code\u003e keep their case (\u003ccode\u003e-Xmx4G\u003c/code\u003e no longer becomes \u003ccode\u003e-xmx4g\u003c/code\u003e). Unrecognized options are now reported as typed (\u003ccode\u003e--NOPE\u003c/code\u003e instead of \u003ccode\u003e--nope\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eJSON and YAML config files are read as UTF-8 by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/955\"\u003e#955\u003c/a\u003e) instead of the locale encoding, completing the secrets-file fix from 2.15.0. \u003ccode\u003ejson_file_encoding\u003c/code\u003e/\u003ccode\u003eyaml_file_encoding\u003c/code\u003e still override it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDiscriminated union defaults are partially updated again\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/997\"\u003e#997\u003c/a\u003e). This reverts the 2.15.0 regression with \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e: the default is only dropped when the incoming value selects a \u003cem\u003edifferent\u003c/em\u003e union member.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.15 and pydantic 2.14 support\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1026\"\u003e#1026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1029\"\u003e#1029\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1022\"\u003e#1022\u003c/a\u003e). pydantic 2.14 broke \u003ccode\u003eCliApp.run\u003c/code\u003e and \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e handling; both are fixed.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCached settings instances\u003c/strong\u003e via \u003ccode\u003eSettings.settings_cached()\u003c/code\u003e and \u003ccode\u003eSettings.settings_clear_cache()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/952\"\u003e#952\u003c/a\u003e). These give you a process-local singleton per settings class without hand-rolling \u003ccode\u003elru_cache\u003c/code\u003e wrappers. Calling the class directly still builds a fresh instance.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAWS Systems Manager Parameter Store source\u003c/strong\u003e — \u003ccode\u003eAWSSystemsManagerSettingsSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/941\"\u003e#941\u003c/a\u003e). It recursively reads every parameter under an \u003ccode\u003essm_path\u003c/code\u003e, with \u003ccode\u003e/\u003c/code\u003e mapping onto nested models. Install it with the new \u003ccode\u003eaws-systems-manager\u003c/code\u003e extra.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenv_file_depth\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/940\"\u003e#940\u003c/a\u003e) lets a relative \u003ccode\u003eenv_file\u003c/code\u003e be found in parent directories, mirroring \u003ccode\u003epyproject_toml_depth\u003c/code\u003e. This is useful when scripts run from a subdirectory of a monorepo. It defaults to \u003ccode\u003e0\u003c/code\u003e, which keeps the current behavior.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eCliVariadicArg\u003c/code\u003e for named variadic options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/949\"\u003e#949\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/958\"\u003e#958\u003c/a\u003e). It accepts \u003ccode\u003e--param a b c\u003c/code\u003e in addition to repeated \u003ccode\u003e--param a --param b\u003c/code\u003e. Required fields need at least one value.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eCliApp.serialize\u003c/code\u003e output now round-trips through \u003ccode\u003eCliApp.run\u003c/code\u003e for enums, tuples, dates and \u003ccode\u003eDecimal\u003c/code\u003es (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/988\"\u003e#988\u003c/a\u003e), explicit \u003ccode\u003eNone\u003c/code\u003e values (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/981\"\u003e#981\u003c/a\u003e), empty containers (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1008\"\u003e#1008\u003c/a\u003e), \u003ccode\u003eCliVariadicArg\u003c/code\u003e values (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/976\"\u003e#976\u003c/a\u003e) and populated \u003ccode\u003eCliUnknownArgs\u003c/code\u003e fields, which previously raised \u003ccode\u003eIndexError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/992\"\u003e#992\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eEmpty JSON arrays (\u003ccode\u003e--items []\u003c/code\u003e) now give an empty list instead of \u003ccode\u003e['']\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/994\"\u003e#994\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eTuples, \u003ccode\u003efrozenset\u003c/code\u003e, \u003ccode\u003eMutableSequence\u003c/code\u003e and other collection subtypes are now treated as repeatable/variadic options (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/972\"\u003e#972\u003c/a\u003e), and so are named collection type aliases such as \u003ccode\u003eTypeAliasType('Addrs', list[IPvAnyAddress])\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1032\"\u003e#1032\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecli_exit_on_error=False\u003c/code\u003e is now honored in \u003ccode\u003eCliSubCommand\u003c/code\u003e parsers, which raise \u003ccode\u003eSettingsError\u003c/code\u003e instead of exiting (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/977\"\u003e#977\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliSubCommand\u003c/code\u003e aliases keep their case with \u003ccode\u003ecase_sensitive=False\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/989\"\u003e#989\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eEach \u003ccode\u003eCliUnknownArgs\u003c/code\u003e field now receives only its own subcommand's leftover args (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1004\"\u003e#1004\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliApp.format_help\u003c/code\u003e no longer crashes when \u003ccode\u003ecli_prefix\u003c/code\u003e is set in \u003ccode\u003emodel_config\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/945\"\u003e#945\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eType aliases and parsing\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNamed union type aliases (\u003ccode\u003eTypeAliasType('V', list[int] | str)\u003c/code\u003e) now decode like their inline equivalents in env and dotenv sources, including under \u003ccode\u003eOptional\u003c/code\u003e, \u003ccode\u003eAnnotated\u003c/code\u003e and custom validation aliases (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1006\"\u003e#1006\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1030\"\u003e#1030\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1041\"\u003e#1041\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eResolving a named \u003ccode\u003eAnnotated\u003c/code\u003e type alias no longer mutates shared \u003ccode\u003eFieldInfo\u003c/code\u003e metadata, which made validators run twice on subclasses or after \u003ccode\u003emodel_rebuild()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/979\"\u003e#979\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eA bare single-segment \u003ccode\u003eAliasPath('SOME_KEY')\u003c/code\u003e no longer tries to JSON-decode plain string values (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/980\"\u003e#980\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecollections.abc.Set\u003c/code\u003e/\u003ccode\u003eMutableSet\u003c/code\u003e/\u003ccode\u003etyping.AbstractSet\u003c/code\u003e fields now JSON-decode env values (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/973\"\u003e#973\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eA bare \u003ccode\u003etyping.Dict\u003c/code\u003e field with \u003ccode\u003eenv_nested_delimiter\u003c/code\u003e no longer raises \u003ccode\u003eIndexError\u003c/code\u003e, which was a regression in 2.13.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1009\"\u003e#1009\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCase-insensitive matching now works for nested pydantic dataclasses (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1010\"\u003e#1010\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDotenv, secrets and config files\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWith \u003ccode\u003eextra='allow'\u003c/code\u003e, a non-lowercase \u003ccode\u003eenv_prefix\u003c/code\u003e is now stripped from dotenv extras (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/959\"\u003e#959\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/968\"\u003e#968\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esecrets_case_sensitive=True\u003c/code\u003e is now honored on Windows (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1001\"\u003e#1001\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn empty JSON config file is treated as an empty mapping instead of crashing (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/947\"\u003e#947\u003c/a\u003e), matching YAML and TOML.\u003c/li\u003e\n\u003cli\u003eTOML table headers: \u003ccode\u003e~\u003c/code\u003e paths are now expanded when checking that the file exists (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1034\"\u003e#1034\u003c/a\u003e), and an explicit \u003ccode\u003etoml_table_header=()\u003c/code\u003e now overrides the model config to read the file root (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1027\"\u003e#1027\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eCloud sources\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAzure Key Vault and GCP Secret Manager now honor \u003ccode\u003eenv_parse_none_str\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1019\"\u003e#1019\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1040\"\u003e#1040\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAzure Key Vault: \u003ccode\u003edash_to_underscore=True\u003c/code\u003e now works for nested model fields (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1025\"\u003e#1025\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eNestedSecretsSettingsSource\u003c/code\u003e now validates its specific constructor arguments (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/975\"\u003e#975\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8c259f41b49b4cefbe4fb676d3c1f52dddd3cca8\"\u003e\u003ccode\u003e8c259f4\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1043\"\u003e#1043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4bc667ada383aca4df00304cd171f327a9fae163\"\u003e\u003ccode\u003e4bc667a\u003c/code\u003e\u003c/a\u003e Keep case of non-option CLI args when case_sensitive=False (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f75a8057a5fafe4aef3a042c2adf367c6987f73f\"\u003e\u003ccode\u003ef75a805\u003c/code\u003e\u003c/a\u003e Simplify alias resolution branch and test alias with AliasChoices/AliasPath (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/cfdc5585e821e84905905027de68a0188213537a\"\u003e\u003ccode\u003ecfdc558\u003c/code\u003e\u003c/a\u003e Honor env_parse_none_str for GCP Secret Manager (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1040\"\u003e#1040\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/081d39f9c73f46e68bc2bef75a23f7d84ed0c377\"\u003e\u003ccode\u003e081d39f\u003c/code\u003e\u003c/a\u003e Fix config file and CLI values being ignored when alias differs from validati...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c46ebc4cc599c09f3692f4d2e82a8f0bb5433f3a\"\u003e\u003ccode\u003ec46ebc4\u003c/code\u003e\u003c/a\u003e Expand home paths when checking TOML table headers (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/6ea85e68532ed4365d7e43509369f41b5820ac74\"\u003e\u003ccode\u003e6ea85e6\u003c/code\u003e\u003c/a\u003e Decode optional Annotated named union aliases (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1041\"\u003e#1041\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ca9d7c4d7440ca35edff91a0e947f96e6381d890\"\u003e\u003ccode\u003eca9d7c4\u003c/code\u003e\u003c/a\u003e Fix JSON decoding for optional named union aliases (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1030\"\u003e#1030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/b6ddda2c8db5d8b0c13af7bafab8502ed7ea072c\"\u003e\u003ccode\u003eb6ddda2\u003c/code\u003e\u003c/a\u003e Fix CLI parsing for named collection type aliases (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1032\"\u003e#1032\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/bedb60e2cc253be2ae11003a51108c535a58757c\"\u003e\u003ccode\u003ebedb60e\u003c/code\u003e\u003c/a\u003e Honor explicit empty TOML table header overrides (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1027\"\u003e#1027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.15.0...v2.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.71.0 to 2.72.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.72.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eAsgi\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet \u003ccode\u003euser_agent.original\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7794\"\u003e#7794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7781\"\u003e#7781\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eBoto3\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eServiceExtension\u003c/code\u003e class by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7536\"\u003e#7536\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd response, retry, and error span attributes by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7499\"\u003e#7499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd common OTel AWS client attributes by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7481\"\u003e#7481\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eWsgi\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003euser_agent.original\u003c/code\u003e attr for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7793\"\u003e#7793\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7780\"\u003e#7780\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(aiohttp) Add \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7785\"\u003e#7785\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(aiohttp,sanic,tornado) Add \u003ccode\u003euser_agent.original\u003c/code\u003e attr for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7795\"\u003e#7795\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(sanic) Add \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7783\"\u003e#7783\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(tornado) Add \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7787\"\u003e#7787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(types) Export DataCollectionUserOptions from sentry_sdk.types by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7957\"\u003e#7957\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBetter IPv6 localhost detection by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7786\"\u003e#7786\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eBoto3\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTrace the complete botocore client-call lifecycle by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7538\"\u003e#7538\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFinish \u003ccode\u003eStreamingBody\u003c/code\u003e span correctly by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7540\"\u003e#7540\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(crons) Return \u003ccode\u003eNone\u003c/code\u003e from \u003ccode\u003ecapture_checkin\u003c/code\u003e when nothing is sent by \u003ca href=\"https://github.com/HardMax71\"\u003e\u003ccode\u003e@​HardMax71\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7868\"\u003e#7868\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(scrubber) Scrub request bodies that are JSON arrays by \u003ca href=\"https://github.com/Om-singhaI\"\u003e\u003ccode\u003e@​Om-singhaI\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7561\"\u003e#7561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix span, metrics, log client reports by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7933\"\u003e#7933\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003ch4\u003eDeps\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eLock file maintenance by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7848\"\u003e#7848\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLock file maintenance by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7484\"\u003e#7484\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOpenai Agents\u003c/h4\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.72.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eAsgi\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet \u003ccode\u003euser_agent.original\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7794\"\u003e#7794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7781\"\u003e#7781\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eBoto3\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eServiceExtension\u003c/code\u003e class by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7536\"\u003e#7536\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd response, retry, and error span attributes by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7499\"\u003e#7499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd common OTel AWS client attributes by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7481\"\u003e#7481\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eWsgi\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003euser_agent.original\u003c/code\u003e attr for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7793\"\u003e#7793\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7780\"\u003e#7780\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(aiohttp) Add \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7785\"\u003e#7785\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(aiohttp,sanic,tornado) Add \u003ccode\u003euser_agent.original\u003c/code\u003e attr for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7795\"\u003e#7795\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(sanic) Add \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7783\"\u003e#7783\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(tornado) Add \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7787\"\u003e#7787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(types) Export DataCollectionUserOptions from sentry_sdk.types by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7957\"\u003e#7957\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBetter IPv6 localhost detection by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7786\"\u003e#7786\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eBoto3\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTrace the complete botocore client-call lifecycle by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7538\"\u003e#7538\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFinish \u003ccode\u003eStreamingBody\u003c/code\u003e span correctly by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7540\"\u003e#7540\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(crons) Return \u003ccode\u003eNone\u003c/code\u003e from \u003ccode\u003ecapture_checkin\u003c/code\u003e when nothing is sent by \u003ca href=\"https://github.com/HardMax71\"\u003e\u003ccode\u003e@​HardMax71\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7868\"\u003e#7868\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(scrubber) Scrub request bodies that are JSON arrays by \u003ca href=\"https://github.com/Om-singhaI\"\u003e\u003ccode\u003e@​Om-singhaI\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7561\"\u003e#7561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix span, metrics, log client reports by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7933\"\u003e#7933\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003ch4\u003eDeps\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eLock file maintenance by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7848\"\u003e#7848\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLock file maintenance by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7484\"\u003e#7484\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOpenai Agents\u003c/h4\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/9d245140804fb0238bf9718f53a53ee5b30f0f8d\"\u003e\u003ccode\u003e9d24514\u003c/code\u003e\u003c/a\u003e release: 2.72.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/4dc1d72fd49cf2c76b2b7a316d06f056da638150\"\u003e\u003ccode\u003e4dc1d72\u003c/code\u003e\u003c/a\u003e fix: Fix span, metrics, log client reports (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7933\"\u003e#7933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/578039961170fc5b27ab813861a5adb698372cff\"\u003e\u003ccode\u003e5780399\u003c/code\u003e\u003c/a\u003e feat(types): Export DataCollectionUserOptions from sentry_sdk.types (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7957\"\u003e#7957\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/1ca032605a337eb1dee696b594c28d7620e93ddf\"\u003e\u003ccode\u003e1ca0326\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7848\"\u003e#7848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/f5bf69bc6abebccba900b4d2606995fdfdf87a5e\"\u003e\u003ccode\u003ef5bf69b\u003c/code\u003e\u003c/a\u003e ci(mypy): Bump version to 2.4.0 (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7937\"\u003e#7937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/02210fa61b4fe2f5de849fa10984cd576118fafe\"\u003e\u003ccode\u003e02210fa\u003c/code\u003e\u003c/a\u003e ci(openai-agents): Bump version for type checking to 0.23.1 (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7935\"\u003e#7935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/fcccb7b389adde78c05d73861d766d93dc4b85d0\"\u003e\u003ccode\u003efcccb7b\u003c/code\u003e\u003c/a\u003e ci(strawberry-graphql): Bump version for type checking to 0.332.0 (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7936\"\u003e#7936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/7cb80948cbdefb10831740c23b49e56e348532a5\"\u003e\u003ccode\u003e7cb8094\u003c/code\u003e\u003c/a\u003e chore: Deprecate \u003ccode\u003eai.monitoring.record_token_usage()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7918\"\u003e#7918\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/1f4ba26cdd92ab9fe877af7b511ddff02e8bd8c5\"\u003e\u003ccode\u003e1f4ba26\u003c/code\u003e\u003c/a\u003e chore: Deprecate \u003ccode\u003esend_default_pii\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7694\"\u003e#7694\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/4b9d329880aeb696d88d735fb01956b06a46e923\"\u003e\u003ccode\u003e4b9d329\u003c/code\u003e\u003c/a\u003e refactor: move FastAPI active thread tracking into Starlette (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7825\"\u003e#7825\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.71.0...2.72.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `starlette` from 1.7.0 to 1.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/starlette/releases\"\u003estarlette's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.8.0\u003c/h2\u003e\n\u003cp\u003eThis release adds HTTP 103 Early Hints, preserves response trailers through \u003ccode\u003eGZipMiddleware\u003c/code\u003e, and stops \u003ccode\u003eFileResponse\u003c/code\u003e transfers when clients disconnect. Starlette now requires Python 3.11.\u003c/p\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eRequest.send_early_hints()\u003c/code\u003e for HTTP 103 Early Hints through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3435\"\u003e#3435\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Python 3.11 or later, dropping support for Python 3.10 \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3592\"\u003e#3592\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eExclude native gRPC media types (\u003ccode\u003eapplication/grpc\u003c/code\u003e and \u003ccode\u003eapplication/grpc+...\u003c/code\u003e) from \u003ccode\u003eGZipMiddleware\u003c/code\u003e compression by default \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSend \u003ccode\u003ehttp.response.start\u003c/code\u003e immediately in \u003ccode\u003eGZipMiddleware\u003c/code\u003e for responses with an existing \u003ccode\u003eContent-Encoding\u003c/code\u003e, status \u003ccode\u003e206\u003c/code\u003e, or an excluded content type, instead of waiting for the first body chunk \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3631\"\u003e#3631\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eResolve the multipart charset once per request instead of once per field \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3618\"\u003e#3618\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve response trailers through \u003ccode\u003eGZipMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop \u003ccode\u003eFileResponse\u003c/code\u003e transfers when the client disconnects \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3523\"\u003e#3523\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop multipart range responses when the file ends before a range is complete, instead of looping forever \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3583\"\u003e#3583\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore \u003ccode\u003eRange\u003c/code\u003e when \u003ccode\u003eIf-Range\u003c/code\u003e contains a weak ETag \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3567\"\u003e#3567\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eInclude \u003ccode\u003eAllow: GET, HEAD\u003c/code\u003e in \u003ccode\u003eStaticFiles\u003c/code\u003e \u003ccode\u003e405\u003c/code\u003e responses \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3640\"\u003e#3640\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eClose \u003ccode\u003eRequest.stream()\u003c/code\u003e generators deterministically, avoiding \u0026quot;Exception ignored\u0026quot; errors with stacked \u003ccode\u003eBaseHTTPMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3628\"\u003e#3628\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eVary: Cookie\u003c/code\u003e when \u003ccode\u003eSession.pop()\u003c/code\u003e removes an existing key \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3186\"\u003e#3186\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eEmit \u003ccode\u003eMax-Age=0\u003c/code\u003e on the session cookie when \u003ccode\u003eSessionMiddleware\u003c/code\u003e uses \u003ccode\u003emax_age=0\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3651\"\u003e#3651\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBracket IPv6 hostnames in \u003ccode\u003eURL.replace()\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3617\"\u003e#3617\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull changelog:\u003c/strong\u003e \u003ca href=\"https://github.com/Kludex/starlette/compare/1.7.0...1.8.0\"\u003e1.7.0...1.8.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/starlette/blob/main/docs/release-notes.md\"\u003estarlette's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.8.0 (October 13, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release drops Python 3.10 support and adds HTTP 103 Early Hints.\u003c/p\u003e\n\u003ch4\u003eAdded\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eRequest.send_early_hints()\u003c/code\u003e for HTTP 103 Early Hints through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3435\"\u003e#3435\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanged\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Python 3.11 or later, dropping support for Python 3.10 \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3592\"\u003e#3592\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eExclude native gRPC media types (\u003ccode\u003eapplication/grpc\u003c/code\u003e and \u003ccode\u003eapplication/grpc+...\u003c/code\u003e) from \u003ccode\u003eGZipMiddleware\u003c/code\u003e compression by default \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSend \u003ccode\u003ehttp.response.start\u003c/code\u003e immediately in \u003ccode\u003eGZipMiddleware\u003c/code\u003e for responses with an existing \u003ccode\u003eContent-Encoding\u003c/code\u003e, status \u003ccode\u003e206\u003c/code\u003e, or an excluded content type, instead of waiting for the first body chunk \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3631\"\u003e#3631\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eResolve the multipart charset once per request instead of once per field \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3618\"\u003e#3618\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixed\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve response trailers through \u003ccode\u003eGZipMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop \u003ccode\u003eFileResponse\u003c/code\u003e transfers when the client disconnects \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3523\"\u003e#3523\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop multipart range responses when the file ends before a range is complete, instead of looping forever \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3583\"\u003e#3583\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore \u003ccode\u003eRange\u003c/code\u003e when \u003ccode\u003eIf-Range\u003c/code\u003e contains a weak ETag \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3567\"\u003e#3567\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eInclude \u003ccode\u003eAllow: GET, HEAD\u003c/code\u003e in \u003ccode\u003eStaticFiles\u003c/code\u003e \u003ccode\u003e405\u003c/code\u003e responses \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3640\"\u003e#3640\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eClose \u003ccode\u003eRequest.stream()\u003c/code\u003e generators deterministically, avoiding \u0026quot;Exception ignored\u0026quot; errors with stacked \u003ccode\u003eBaseHTTPMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3628\"\u003e#3628\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eVary: Cookie\u003c/code\u003e when \u003ccode\u003eSession.pop()\u003c/code\u003e removes an existing key \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3186\"\u003e#3186\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eEmit \u003ccode\u003eMax-Age=0\u003c/code\u003e on the session cookie when \u003ccode\u003eSessionMiddleware\u003c/code\u003e uses \u003ccode\u003emax_age=0\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3651\"\u003e#3651\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBracket IPv6 hostnames in \u003ccode\u003eURL.replace()\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3617\"\u003e#3617\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/starlette/commit/7b2948fe7b7fff28bb018607d54cd4dfa518910e\"\u003e\u003ccode\u003e7b2948f\u003c/code\u003e\u003c/a\u003e Version 1.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/5b544ced7345d8b2315419ecaded4b52bffe6b76\"\u003e\u003ccode\u003e5b544ce\u003c/code\u003e\u003c/a\u003e Send response start immediately when GZipMiddleware cannot compress (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3631\"\u003e#3631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/96d5023c55b29224edb8d684868c49f681d079a9\"\u003e\u003ccode\u003e96d5023\u003c/code\u003e\u003c/a\u003e Emit \u003ccode\u003eMax-Age=0\u003c/code\u003e on session cookie when \u003ccode\u003emax_age=0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3651\"\u003e#3651\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/0a15da395d13e8eb6ecadeb6f4928d7d7c493fc8\"\u003e\u003ccode\u003e0a15da3\u003c/code\u003e\u003c/a\u003e Include allowed methods in StaticFiles 405 responses (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3640\"\u003e#3640\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/ff5b4df55ac4ac625582ecc446c850200c91ae64\"\u003e\u003ccode\u003eff5b4df\u003c/code\u003e\u003c/a\u003e Close \u003ccode\u003eRequest.stream()\u003c/code\u003e generators with \u003ccode\u003eaclosing\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3628\"\u003e#3628\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/7cb2f09c1858ea1400afbd355a900ce14d720533\"\u003e\u003ccode\u003e7cb2f09\u003c/code\u003e\u003c/a\u003e Mark sessions as accessed when popping existing keys (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3186\"\u003e#3186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/c67ca4eeef171c679074f4ebc579ee5dbd657aa8\"\u003e\u003ccode\u003ec67ca4e\u003c/code\u003e\u003c/a\u003e Add HTTP 103 Early Hints support (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3435\"\u003e#3435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/04741d073fb6c3ab5fccad08be8ae7aad1f67e91\"\u003e\u003ccode\u003e04741d0\u003c/code\u003e\u003c/a\u003e Update broken external documentation links (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3621\"\u003e#3621\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/470f986deb9cc3f4475ba0b49ae9f80c380d9fce\"\u003e\u003ccode\u003e470f986\u003c/code\u003e\u003c/a\u003e Correct the documented WebSocket and Request constructor signatures (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/b2e8750b4aaa183553d32a61cf553bef8d406465\"\u003e\u003ccode\u003eb2e8750\u003c/code\u003e\u003c/a\u003e Bracket IPv6 hostnames in \u003ccode\u003eURL.replace()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3617\"\u003e#3617\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/starlette/compare/1.7.0...1.8.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `wrapt` from 2.5.0 to 2.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/GrahamDumpleton/wrapt/releases\"\u003ewrapt's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ewrapt 2.5.1\u003c/h2\u003e\n\u003cp\u003eFull release notes: \u003ca href=\"https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1\"\u003ehttps://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eInstall from PyPi (recommended):\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epip install wrapt==2.5.1\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003ePyPi uploads follow each GitHub release; if \u003ccode\u003epip\u003c/code\u003e reports the\nversion is unavailable, the matching PyPi upload may not have\nhappened yet.\u003c/p\u003e\n\u003cp\u003ePre-built wheels are provided for a range of Python versions\nand platforms (Linux x86_64/aarch64/riscv64, macOS x86_64 and\narm64, Windows x86_64 and arm64, plus PyPy and free-threaded\nbuilds). The source distribution is also attached together\nwith \u003ccode\u003eSHA256SUMS\u003c/code\u003e for verification.\u003c/p\u003e\n\u003ch2\u003ewrapt 2.5.1rc1\u003c/h2\u003e\n\u003cp\u003eRelease candidate. Release notes for the upcoming\n2.5.1 final (work in progress): \u003ca href=\"https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1\"\u003ehttps://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eMay be installable from PyPi:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epip install wrapt==2.5.1rc1\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eIf \u003ccode\u003epip\u003c/code\u003e reports the version is unavailable, this candidate\neither has not been uploaded yet or is not being published to\nPyPi. Use the attached wheels or build from the source\ndistribution instead:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003etar xf wrapt-2.5.1rc1.tar.gz\ncd wrapt-2.5.1rc1\npip install .\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003eSHA256SUMS\u003c/code\u003e is attached for verification of the archives.\u003c/p\u003e\n\u003ch2\u003ewrapt 2.5.1.dev1\u003c/h2\u003e\n\u003cp\u003eDevelopment snapshot. Not normally published to PyPi\n(occasionally uploaded to exercise the release pipeline).\u003c/p\u003e\n\u003cp\u003eRelease notes for the upcoming 2.5.1 final (work in\nprogress): \u003ca href=\"https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1\"\u003ehttps://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ePlatform wheels and the source distribution are attached. To\ntest against your Python install, either grab a matching wheel\nor build from the source distribution:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epip install wrapt-2.5.1.dev1-\u0026lt;python\u0026gt;-\u0026lt;abi\u0026gt;-\u0026lt;platform\u0026gt;.whl\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eor\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/GrahamDumpleton/wrapt/blob/develop/docs/changes.rst\"\u003ewrapt's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.5.1\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugs Fixed\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eA \u003ccode\u003eLazyObjectProxy\u003c/code\u003e created with an \u003ccode\u003einterface\u003c/code\u003e argument that\ndeclared a path-like type, such as \u003ccode\u003eos.PathLike\u003c/code\u003e or \u003ccode\u003epathlib.Path\u003c/code\u003e,\ndid not define the \u003ccode\u003e__fspath__()\u003c/code\u003e special method on the class it\ngenerated. Because \u003ccode\u003eos.fspath()\u003c/code\u003e looks up \u003ccode\u003e__fspath__()\u003c/code\u003e on the type\nof the object, passing such a proxy to \u003ccode\u003eos.fspath()\u003c/code\u003e, the builtin\n\u003ccode\u003eopen()\u003c/code\u003e or other standard library functions accepting paths raised\n\u003ccode\u003eTypeError\u003c/code\u003e before the factory callable had been invoked to create the\nwrapped object. The \u003ccode\u003e__fspath__()\u003c/code\u003e special method is now added when the\ndeclared interface provides it, in the same way as is already done for\nthe other special methods looked up on the type, so the first path\nconversion triggers creation of the wrapped object and succeeds. With\nthanks to Muneeb Sheikh for \u003ccode\u003epull request [#360](https://github.com/GrahamDumpleton/wrapt/issues/360) \u0026lt;https://github.com/GrahamDumpleton/wrapt/pull/360\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA callback passed to \u003ccode\u003ewrapt.WeakFunctionProxy\u003c/code\u003e which was callable but\nevaluated as false, such as an event emitter object which reports its\nnumber of subscribers via \u003ccode\u003e__len__()\u003c/code\u003e and is empty when first created,\nwas passed the underlying weak reference object instead of the proxy\nwhen the wrapped function expired. Where the wrapped function was a\nbound method, such a callback could also be called twice, once each\nwhen the instance and the function expired. Only \u003ccode\u003eNone\u003c/code\u003e is now treated\nas meaning no callback was supplied, which mirrors the behaviour of\n\u003ccode\u003eweakref.ref()\u003c/code\u003e and \u003ccode\u003eweakref.proxy()\u003c/code\u003e in the standard library, so\nthese callbacks now receive the proxy and are called only once, as for\nany other callback. With thanks to Huanyi Xie for \u003ccode\u003epull request [#359](https://github.com/GrahamDumpleton/wrapt/issues/359) \u0026lt;https://github.com/GrahamDumpleton/wrapt/pull/359\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA \u003ccode\u003ewrapt.AdapterFactory\u003c/code\u003e instance passed as the \u003ccode\u003eadapter\u003c/code\u003e argument\nto \u003ccode\u003ewrapt.decorator\u003c/code\u003e was ignored, and so never called, if the instance\nevaluated as false, such as when the factory class defined \u003ccode\u003e__bool__()\u003c/code\u003e\nor \u003ccode\u003e__len__()\u003c/code\u003e. The decorated function then retained its original\nsignature instead of that produced by the factory. Whether an adapter\nfactory was supplied is now determined by type before the truth value\nof the adapter is considered, so such factories are always called. As a\nconsequence of this change a factory can now also return \u003ccode\u003eNone\u003c/code\u003e, or\nany other false value, to indicate that no adapter should be used for a\nparticular function, where previously this failed with an obscure error.\nWith thanks to Luochenchen for \u003ccode\u003epull request [#358](https://github.com/GrahamDumpleton/wrapt/issues/358) \u0026lt;https://github.com/GrahamDumpleton/wrapt/pull/358\u0026gt;\u003c/code\u003e_ which identified\nthe issue.\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/GrahamDumpleton/wrapt/commit/dbbb21fa76915541a850a2029e97c116f38a53b0\"\u003e\u003ccode\u003edbbb21f\u003c/code\u003e\u003c/a\u003e Merge branch 'release/2.5.1'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/95e2afbb47cadfdff5e19ec88ba7caf718bd4a45\"\u003e\u003ccode\u003e95e2afb\u003c/code\u003e\u003c/a\u003e Drop the release candidate suffix for the 2.5.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/1ed68ca8c32b15c59dea50032b08bc3271529ec3\"\u003e\u003ccode\u003e1ed68ca\u003c/code\u003e\u003c/a\u003e Update to 2.5.1rc1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/77e826dd8973c960f0733977ec67f43896a4d050\"\u003e\u003ccode\u003e77e826d\u003c/code\u003e\u003c/a\u003e Recognise adapter factories by type so one which evaluates as false is not ig...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/13efe635b6942394977b016cfd2d8ac6530a8124\"\u003e\u003ccode\u003e13efe63\u003c/code\u003e\u003c/a\u003e Move change note for PR \u003ca href=\"https://redirect.github.com/GrahamDumpleton/wrapt/issues/359\"\u003e#359\u003c/a\u003e under 2.5.1 and add clarifying comments.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/6ba6048628e7a1c584bd767b451037dc36dd6b03\"\u003e\u003ccode\u003e6ba6048\u003c/code\u003e\u003c/a\u003e Reorder \u003cstrong\u003efspath\u003c/strong\u003e handling in lazy proxy and add change note for PR \u003ca href=\"https://redirect.github.com/GrahamDumpleton/wrapt/issues/360\"\u003e#360\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/5e97e2d1a3c2effc9f1f8357f83802e6cbce8998\"\u003e\u003ccode\u003e5e97e2d\u003c/code\u003e\u003c/a\u003e Update to 2.5.1.dev1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/e9d491c7c8b31747e9dc280f48783d69d9ac2904\"\u003e\u003ccode\u003ee9d491c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/GrahamDumpleton/wrapt/issues/359\"\u003e#359\u003c/a\u003e from xiehuanyi/fix-falsey-weak-proxy-callbacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/0d6c935bac4fe9c4b3ca2a0f696950024b8b07bc\"\u003e\u003ccode\u003e0d6c935\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/GrahamDumpleton/wrapt/issues/360\"\u003e#360\u003c/a\u003e from muneikh/fix-lazy-pathlike-interface\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/de574aa4fd5ca3c272e533dfd250a4868bfacbb3\"\u003e\u003ccode\u003ede574aa\u003c/code\u003e\u003c/a\u003e Honor the declared pathlike interface in lazy proxies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/GrahamDumpleton/wrapt/compare/2.5.0...2.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `aiohttp` from 3.14.4 to 3.14.5\nUpdates `hypothesis` from 6.168.5 to 6.170.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7572cd07bbb9d845c40f71c95ba3853fb7467403\"\u003e\u003ccode\u003e7572cd0\u003c/code\u003e\u003c/a\u003e Bump hypothesis version to 6.170.0 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/1ad039f4ead3a91721bb8adde8da6c46979d549c\"\u003e\u003ccode\u003e1ad039f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4871\"\u003e#4871\u003c/a\u003e from Zac-HD/claude/hypothesi...\n\n_Description has been truncated_","html_url":"https://github.com/Burbanit0/Vote-App/pull/990","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Burbanit0%2FVote-App/issues/990","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/990/packages"},{"uuid":"5992427616","node_id":"PR_kwDOVUVoh88AAAABKLo7CQ","number":8,"state":"open","title":"Bump pydantic from 2.12.3 to 2.14.1 in /backend","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-10-23T05:25:42.000Z","updated_at":"2026-10-23T05:25:45.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"pydantic","old_version":"2.12.3","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.12.3 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.3...v2.14.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=pydantic\u0026package-manager=pip\u0026previous-version=2.12.3\u0026new-version=2.14.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","html_url":"https://github.com/xiyuxu02/Ai-Agent-main/pull/8","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiyuxu02%2FAi-Agent-main/issues/8","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/8/packages"},{"uuid":"5969462368","node_id":"PR_kwDOVSsfVM8AAAABJ5ZsxQ","number":4,"state":"closed","title":"Bump the python-dependencies group with 8 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-10-24T19:57:50.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-21T22:20:19.000Z","updated_at":"2026-10-24T19:57:54.000Z","time_to_close":250651,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python-dependencies","update_count":8,"packages":[{"name":"pydantic","old_version":"2.12.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"numpy","old_version":"2.4.2","new_version":"2.5.4","repository_url":"https://github.com/numpy/numpy"},{"name":"shapely","old_version":"2.1.2","new_version":"2.2.0","repository_url":"https://github.com/shapely/shapely"},{"name":"pytest-cov","old_version":"7.0.0","new_version":"7.1.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"ruff","old_version":"0.15.0","new_version":"0.17.1","repository_url":"https://github.com/astral-sh/ruff"},{"name":"bandit","old_version":"1.9.3","new_version":"1.9.4","repository_url":"https://github.com/PyCQA/bandit"},{"name":"pip-audit","old_version":"2.10.0","new_version":"2.10.1","repository_url":"https://github.com/pypa/pip-audit"},{"name":"pre-commit","old_version":"4.5.1","new_version":"4.7.0","repository_url":"https://github.com/pre-commit/pre-commit"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-dependencies group with 8 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.14.1` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.2` | `2.5.4` |\n| [shapely](https://github.com/shapely/shapely) | `2.1.2` | `2.2.0` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `7.0.0` | `7.1.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.0` | `0.17.1` |\n| [bandit](https://github.com/PyCQA/bandit) | `1.9.3` | `1.9.4` |\n| [pip-audit](https://github.com/pypa/pip-audit) | `2.10.0` | `2.10.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.5.1` | `4.7.0` |\n\nUpdates `pydantic` from 2.12.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.5...v2.14.1\"\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.2 to 2.5.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/releases\"\u003enumpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.5.4 (Oct 10,  2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.5.4 Release Notes\u003c/h1\u003e\n\u003cp\u003e\u003cem\u003eReleased on 2026-10-10.\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eNumPy 2.5.4 is a patch release that fixes bugs discovered after the 2.5.3\nrelease. Highlights are:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMany typing fixes and improvements,\u003c/li\u003e\n\u003cli\u003eA workaround for the MSVC 19.51 bug, see below.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThis release supports Python versions 3.12-3.15.\u003c/p\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003enumpy.linalg.svd\u003c/code\u003e and \u003ccode\u003enumpy.linalg.lstsq\u003c/code\u003e now raise for inputs containing\ninfinities instead of returning garbage results.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed hangs in \u003ccode\u003enumpy.linalg.svd\u003c/code\u003e and \u003ccode\u003enumpy.linalg.lstsq\u003c/code\u003e for certain inputs\ncontaining infinities for recent versions of some LAPACK implementations.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003enumpy.linalg.cond\u003c/code\u003e now handles non-finite inputs more consistently.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32593\"\u003egh-32593\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eStringDType hashing with NaN sentinels\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eStringDType\u003c/code\u003e instances with equivalent floating-point NaN sentinels now\nhave equal hashes. Previously, distinct NaN objects could produce equal\ndtype instances with different hashes, causing dictionary lookups and set\ndeduplication to fail.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32563\"\u003egh-32563\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003ch3\u003e\u003ccode\u003eMaskedArray\u003c/code\u003e resets a fill_value that cannot be represented in a new dtype\u003c/h3\u003e\n\u003cp\u003eA fill_value copied from a source array is now reset to the default fill_value\nfor the new dtype when it cannot be represented in that dtype. Previously the\ncopied value could be stale: ufuncs that change dtype left the result holding a\nfill_value typed for the old dtype, which raised a \u003ccode\u003eTypeError\u003c/code\u003e only when\nsomething later validated it (such as \u003ccode\u003e.view()\u003c/code\u003e), and a floating point\nfill_value that overflows an integer dtype was kept as an out-of-range value\ntogether with a \u003ccode\u003eRuntimeWarning\u003c/code\u003e. Both now fall back to the default,\nincluding when a masked array is passed to \u003ccode\u003eMaskedArray\u003c/code\u003e with a different\n\u003ccode\u003edtype\u003c/code\u003e. A fill_value given explicitly by the user is still validated and\nraises as before. This can now raise a \u003ccode\u003eComplexWarning\u003c/code\u003e if the fill_value is\ncomplex and the new dtype is real.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/a3d0ef1df045b858e68115001fdabc930bb3b68c\"\u003e\u003ccode\u003ea3d0ef1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32969\"\u003e#32969\u003c/a\u003e from charris/prepare-2.5.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/087b5367c84b5296c32c26c415438d87d3888586\"\u003e\u003ccode\u003e087b536\u003c/code\u003e\u003c/a\u003e MAINT: Make OpenBLAS version check use 2.5.x branch.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/91acd879242a679604579895d490c26f864a4b03\"\u003e\u003ccode\u003e91acd87\u003c/code\u003e\u003c/a\u003e REL: Prepare for the NumPy 2.5.4 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/9cc555bae07244551829c3a4eb7a635bef6345b3\"\u003e\u003ccode\u003e9cc555b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32956\"\u003e#32956\u003c/a\u003e from charris/backport-typing-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/e04b972a306136b8ac9219be199948badafa3475\"\u003e\u003ccode\u003ee04b972\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003edtype[void].names\u003c/code\u003e: allow setting with list (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32943\"\u003e#32943\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/d9299693d20c3fd1aa83b9464d074632cf59aaac\"\u003e\u003ccode\u003ed929969\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003etimedelta64\u003c/code\u003e: \u003ccode\u003edatetime.timedelta\u003c/code\u003e construction isn't deprecated (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/839467fdbcc1d68b68f4fe2a61d3387107c78394\"\u003e\u003ccode\u003e839467f\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003ema.getmaskarray\u003c/code\u003e: accept array-likes (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32934\"\u003e#32934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/64b721b23f51543ed9316a5fd21a48734760b429\"\u003e\u003ccode\u003e64b721b\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003epolynomial\u003c/code\u003e: accept scalar \u003ccode\u003ecoef\u003c/code\u003e in the poly constructors (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32931\"\u003e#32931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/06b7ad226e41b71919b2d35c50063998eced0b9d\"\u003e\u003ccode\u003e06b7ad2\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003evoid\u003c/code\u003e: accept any \u003ccode\u003edtype: str\u003c/code\u003e in constructor calls (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32928\"\u003e#32928\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/c7bcd2c0aaca732b87575829cc61508076de1af5\"\u003e\u003ccode\u003ec7bcd2c\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003eplace\u003c/code\u003e: widen \u003ccode\u003emask\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32926\"\u003e#32926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/numpy/numpy/compare/v2.4.2...v2.5.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `shapely` from 2.1.2 to 2.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/shapely/shapely/releases\"\u003eshapely's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.2.0\u003c/h2\u003e\n\u003cp\u003eShapely 2.2.0 is a feature release with various new functions, improvements and bug fixes. Highlights include performance improvements for scalar attribute and method calls, and the new \u003ccode\u003eminimum_width\u003c/code\u003e, \u003ccode\u003ecoverage_clean\u003c/code\u003e, \u003ccode\u003esplit\u003c/code\u003e, \u003ccode\u003etransform_coordseq\u003c/code\u003e, and \u003ccode\u003eget_segments\u003c/code\u003e top-level functions.\u003c/p\u003e\n\u003cp\u003eShapely 2.2 supports Python \u0026gt;= 3.11, and binary wheels on PyPI include GEOS 3.14 and are now also provided for the Windows ARM64 platform.\nWheels are available for Python 3.15.\u003c/p\u003e\n\u003cp\u003eFor a full changelog, see \u003ca href=\"https://shapely.readthedocs.io/en/stable/release/2.x.html#version-2-2-0\"\u003ehttps://shapely.readthedocs.io/en/stable/release/2.x.html#version-2-2-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e2.2.0rc1\u003c/h2\u003e\n\u003cp\u003eShapely 2.2.0 is a feature release with various new functions, improvements and bug fixes. This is a first release candidate.\u003c/p\u003e\n\u003cp\u003eFor a full changelog, see \u003ca href=\"https://shapely.readthedocs.io/en/latest/release/2.x.html#version-2-2-0\"\u003ehttps://shapely.readthedocs.io/en/latest/release/2.x.html#version-2-2-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/shapely/shapely/blob/main/CHANGES.txt\"\u003eshapely's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.2.0 (2026-10-07)\u003c/h2\u003e\n\u003cp\u003eShapely 2.2.0 is a feature release with various new functions,\nimprovements and bug fixes. Highlights include performance improvements for\nscalar attribute and method calls, and the new \u003ccode\u003eminimum_width\u003c/code\u003e,\n\u003ccode\u003ecoverage_clean\u003c/code\u003e, \u003ccode\u003esplit\u003c/code\u003e, \u003ccode\u003etransform_coordseq\u003c/code\u003e, and \u003ccode\u003eget_segments\u003c/code\u003e\ntop-level functions.\u003c/p\u003e\n\u003cp\u003eShapely 2.2 supports Python \u0026gt;= 3.11, and binary wheels on PyPI include GEOS 3.14\nand are now also provided for the Windows ARM64 platform.\nWheels are available for Python 3.15.\u003c/p\u003e\n\u003cp\u003eFor a full changelog, see\n\u003ca href=\"https://shapely.readthedocs.io/en/latest/release/2.x.html#version-2-2-0\"\u003ehttps://shapely.readthedocs.io/en/latest/release/2.x.html#version-2-2-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/shapely/shapely/commit/229c71f7128713b37201f3c77336d32b52467454\"\u003e\u003ccode\u003e229c71f\u003c/code\u003e\u003c/a\u003e RLS: 2.2.0 (\u003ca href=\"https://redirect.github.com/shapely/shapely/issues/2526\"\u003e#2526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/702d8fdf786374407f2aab2289086deff91e62ca\"\u003e\u003ccode\u003e702d8fd\u003c/code\u003e\u003c/a\u003e CLN: avoid warnings about discarding const qualifier (\u003ca href=\"https://redirect.github.com/shapely/shapely/issues/2525\"\u003e#2525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/0e92040f2308b8b83f88843cbba35564d1dc1ee0\"\u003e\u003ccode\u003e0e92040\u003c/code\u003e\u003c/a\u003e DOC: update tranform section in the manual (\u003ca href=\"https://redirect.github.com/shapely/shapely/issues/2518\"\u003e#2518\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/677f305290d35eaeb6bb6a6bfecab8b259e38388\"\u003e\u003ccode\u003e677f305\u003c/code\u003e\u003c/a\u003e MAINT: avoid meson-python 0.22 + DOC: recommend install c-compiler in conda d...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/68ff25b2c850389102c662526506f468a01a13e1\"\u003e\u003ccode\u003e68ff25b\u003c/code\u003e\u003c/a\u003e Use DeprecationWarning instead of FutureWarning for shapely.ops.transform() d...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/2590a0c8b4bb63ed5a1acc25ed691e6ce707f6aa\"\u003e\u003ccode\u003e2590a0c\u003c/code\u003e\u003c/a\u003e BUG: fix empty / non-array cases for transform (\u003ca href=\"https://redirect.github.com/shapely/shapely/issues/2523\"\u003e#2523\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/95008b2d75581319eb609137553d07b40268de85\"\u003e\u003ccode\u003e95008b2\u003c/code\u003e\u003c/a\u003e ENH: support array input for transform_coordseq (consistent with transform) (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/e2fe07b0f249c6face34fe544426b46960548221\"\u003e\u003ccode\u003ee2fe07b\u003c/code\u003e\u003c/a\u003e docs: Move changelog entry to docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/c847bb7a1312d72044dd7a4fd2af606b363547c8\"\u003e\u003ccode\u003ec847bb7\u003c/code\u003e\u003c/a\u003e fix: Forward **kwargs in line_interpolate_point and line_locate_point (\u003ca href=\"https://redirect.github.com/shapely/shapely/issues/2480\"\u003e#2480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/30c0a51039d4b4b0b3b74ba117039e2c5849906b\"\u003e\u003ccode\u003e30c0a51\u003c/code\u003e\u003c/a\u003e MAINT: move versioneer config to pyproject.toml; remove setup.cfg (\u003ca href=\"https://redirect.github.com/shapely/shapely/issues/2511\"\u003e#2511\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/shapely/shapely/compare/2.1.2...2.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 7.0.0 to 7.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.0 (2026-03-21)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed total coverage computation to always be consistent, regardless of reporting settings.\nPreviously some reports could produce different total counts, and consequently can make --cov-fail-under behave different depending on\nreporting options.\nSee \u003ccode\u003e[#641](https://github.com/pytest-dev/pytest-cov/issues/641) \u0026lt;https://github.com/pytest-dev/pytest-cov/issues/641\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImprove handling of ResourceWarning from sqlite3.\u003c/p\u003e\n\u003cp\u003eThe plugin adds warning filter for sqlite3 \u003ccode\u003eResourceWarning\u003c/code\u003e unclosed database (since 6.2.0).\nIt checks if there is already existing plugin for this message by comparing filter regular expression.\nWhen filter is specified on command line the message is escaped and does not match an expected message.\nA check for an escaped regular expression is added to handle this case.\u003c/p\u003e\n\u003cp\u003eWith this fix one can suppress \u003ccode\u003eResourceWarning\u003c/code\u003e from sqlite3 from command line::\u003c/p\u003e\n\u003cp\u003epytest -W \u0026quot;ignore:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\u0026quot; ...\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eVarious improvements to documentation.\nContributed by Art Pelling in \u003ccode\u003e[#718](https://github.com/pytest-dev/pytest-cov/issues/718) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/718\u0026gt;\u003c/code\u003e_ and\n\u0026quot;vivodi\u0026quot; in \u003ccode\u003e[#738](https://github.com/pytest-dev/pytest-cov/issues/738) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/738\u0026gt;\u003c/code\u003e\u003cem\u003e.\nAlso closed \u003ccode\u003e[#736](https://github.com/pytest-dev/pytest-cov/issues/736) \u0026lt;https://github.com/pytest-dev/pytest-cov/issues/736\u0026gt;\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed some assertions in tests.\nContributed by in Markéta Machová in \u003ccode\u003e[#722](https://github.com/pytest-dev/pytest-cov/issues/722) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/722\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved unnecessary coverage configuration copying (meant as a backup because reporting commands had configuration side-effects before coverage 5.0).\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/pytest-dev/pytest-cov/commit/66c8a526b1246b5eb8fb1bc218878131bc628622\"\u003e\u003ccode\u003e66c8a52\u003c/code\u003e\u003c/a\u003e Bump version: 7.0.0 → 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f7076624784332594aa4cb3585d4757d295db15e\"\u003e\u003ccode\u003ef707662\u003c/code\u003e\u003c/a\u003e Make the examples use pypy 3.11.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/6049a7847872e3139e6c82e93787123df5dc8672\"\u003e\u003ccode\u003e6049a78\u003c/code\u003e\u003c/a\u003e Make context test use the old ctracer (seems the new sysmon tracer behaves di...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/8ebf20bbbc73478b3f8fd36d30237d9ea083f06b\"\u003e\u003ccode\u003e8ebf20b\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/861d30e60d571f97259c6b718b71c819d5dbc3b9\"\u003e\u003ccode\u003e861d30e\u003c/code\u003e\u003c/a\u003e Remove the backup context manager  - shouldn't be needed since coverage 5.0, ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/fd4c956014035527f0c3c8d7faef3f8cfdadac7f\"\u003e\u003ccode\u003efd4c956\u003c/code\u003e\u003c/a\u003e Pass the precision on the nulled total (seems that there's some caching goion...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/78c9c4ecb005faf4962fd86ff7bf9c9cce9554d6\"\u003e\u003ccode\u003e78c9c4e\u003c/code\u003e\u003c/a\u003e Only run the 3.9 on older deps.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/4849a922e8be725c662a3d9175da571ace6545dc\"\u003e\u003ccode\u003e4849a92\u003c/code\u003e\u003c/a\u003e Punctuation.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/197c35e2f37031fd1927715307ab6eed7cb3d2b7\"\u003e\u003ccode\u003e197c35e\u003c/code\u003e\u003c/a\u003e Update changelog and hopefully I don't forget to publish release again :))\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/14dc1c92d44108384e39803888635fdbfc578b7f\"\u003e\u003ccode\u003e14dc1c9\u003c/code\u003e\u003c/a\u003e Update examples to use 3.11 and make the adhoc layout example look a bit more...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v7.0.0...v7.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.0 to 0.17.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.17.1\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.17.1\u003c/h2\u003e\n\u003cp\u003e|  File  | Platform | Checksum |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.17.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-09.\u003c/p\u003e\n\u003cp\u003eThe executables in our macOS and Windows release archives and \u003ccode\u003eruff\u003c/code\u003e wheels are now code-signed.\nmacOS executables are signed with an Apple Developer ID certificate and notarized by Apple. Windows\nexecutables have timestamped Authenticode signatures from Azure Artifact Signing. This enables\nverification of the release publisher and binary integrity, supports publisher-based allowlisting,\nand should reduce security warnings and antivirus false positives.\u003c/p\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate the default and latest Python versions for 3.15 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28792\"\u003e#28792\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eRuff now defaults to Python 3.11 instead of 3.10 when no Python version is configured through\n\u003ca href=\"https://docs.astral.sh/ruff/settings/#target-version\"\u003e\u003ccode\u003etarget-version\u003c/code\u003e\u003c/a\u003e or\n\u003ca href=\"https://docs.astral.sh/ruff/configuration/#inferring-the-python-version\"\u003e\u003ccode\u003erequires-python\u003c/code\u003e\u003c/a\u003e. When\nchecking for syntax errors without a configured Python version, Ruff now defaults to Python 3.15\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/astral-sh/ruff/commit/4683270c69cbdaf6ad64d3f983fc458d5a43b41f\"\u003e\u003ccode\u003e4683270\u003c/code\u003e\u003c/a\u003e Bump version to 0.17.1 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29420\"\u003e#29420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3514027edb659bbc3c787d355be9d130e5587f15\"\u003e\u003ccode\u003e3514027\u003c/code\u003e\u003c/a\u003e [ty] Update typing conformance suite pin (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29417\"\u003e#29417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/829455624d78f2e89669e4b4b14af2b96abdb1ae\"\u003e\u003ccode\u003e8294556\u003c/code\u003e\u003c/a\u003e Update referenced PR security-review workflow (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29237\"\u003e#29237\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d1e1b1f69b511df4385f64b510eeec4da01c1a0e\"\u003e\u003ccode\u003ed1e1b1f\u003c/code\u003e\u003c/a\u003e [ty] Preserve recursive aliases when rebuilding intersections (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29057\"\u003e#29057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/93526150df078af7dd8fc4226cdcc469539d2001\"\u003e\u003ccode\u003e9352615\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/83a3afc3156d73ae4296f3fa74ede28e4c72bfcd\"\u003e\u003ccode\u003e83a3afc\u003c/code\u003e\u003c/a\u003e Fix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/b42a8734410230f4529151782cae951b99bed858\"\u003e\u003ccode\u003eb42a873\u003c/code\u003e\u003c/a\u003e [ty] Clarify object attribute write-contract rationale (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29384\"\u003e#29384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d01678ebf594c97a7767d4372061c1f80ae5b5bb\"\u003e\u003ccode\u003ed01678e\u003c/code\u003e\u003c/a\u003e [ty] Clarify object attribute write-contract rationale (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29384\"\u003e#29384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/355b42a7719d8a555e3ee50c89848b42d8a11eb5\"\u003e\u003ccode\u003e355b42a\u003c/code\u003e\u003c/a\u003e [ty] Avoid writable override contracts from object (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29373\"\u003e#29373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e26e6d2a54ac2c5e1f5b1945042de3ff3885bf8e\"\u003e\u003ccode\u003ee26e6d2\u003c/code\u003e\u003c/a\u003e [ty] Collect intersection inference through constraint relations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28677\"\u003e#28677\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.0...0.17.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `bandit` from 1.9.3 to 1.9.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/PyCQA/bandit/releases\"\u003ebandit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.9.4\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore: fixed some typos in comments by \u003ca href=\"https://github.com/jakob1379\"\u003e\u003ccode\u003e@​jakob1379\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1351\"\u003ePyCQA/bandit#1351\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump docker/login-action from 3.6.0 to 3.7.0 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1353\"\u003ePyCQA/bandit#1353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump docker/build-push-action from 6.18.0 to 6.19.2 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1357\"\u003ePyCQA/bandit#1357\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix B613 crash when reading from stdin by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1361\"\u003ePyCQA/bandit#1361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInclude filename in nosec 'no failed test' warning by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1363\"\u003ePyCQA/bandit#1363\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix B615 false positive when revision is set via variable by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1358\"\u003ePyCQA/bandit#1358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLower version guard in check_ast_node to Python 3.12 by \u003ca href=\"https://github.com/rcgray\"\u003e\u003ccode\u003e@​rcgray\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1355\"\u003ePyCQA/bandit#1355\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix B106 reporting wrong line number on multiline function calls by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1360\"\u003ePyCQA/bandit#1360\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jakob1379\"\u003e\u003ccode\u003e@​jakob1379\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1351\"\u003ePyCQA/bandit#1351\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1361\"\u003ePyCQA/bandit#1361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rcgray\"\u003e\u003ccode\u003e@​rcgray\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1355\"\u003ePyCQA/bandit#1355\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PyCQA/bandit/compare/1.9.3...1.9.4\"\u003ehttps://github.com/PyCQA/bandit/compare/1.9.3...1.9.4\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/92ae8b82fb422a639f0ed8d99e96cea769594e08\"\u003e\u003ccode\u003e92ae8b8\u003c/code\u003e\u003c/a\u003e Fix B106 reporting wrong line number on multiline function calls (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1360\"\u003e#1360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/c8c8a55c3307333b8eb46cb2ef46d49b1fad6546\"\u003e\u003ccode\u003ec8c8a55\u003c/code\u003e\u003c/a\u003e Lower version guard in check_ast_node to Python 3.12 (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1355\"\u003e#1355\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/8f2f9284fca830ca017b2e2cc3ddc2a7b74b7040\"\u003e\u003ccode\u003e8f2f928\u003c/code\u003e\u003c/a\u003e Fix B615 false positive when revision is set via variable (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1358\"\u003e#1358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/e27493f71c114e0e5dfc0a475d225d7f9f4a7e2b\"\u003e\u003ccode\u003ee27493f\u003c/code\u003e\u003c/a\u003e Include filename in nosec 'no failed test' warning (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1363\"\u003e#1363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/b69b336450301d424e5ba04c9a58e8d41b7169b6\"\u003e\u003ccode\u003eb69b336\u003c/code\u003e\u003c/a\u003e Fix B613 crash when reading from stdin (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1361\"\u003e#1361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/e418b798abcc3f2b00c07fd6315da8fe9aeead00\"\u003e\u003ccode\u003ee418b79\u003c/code\u003e\u003c/a\u003e Bump docker/build-push-action from 6.18.0 to 6.19.2 (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1357\"\u003e#1357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/ff646fd7e0e34fb350196fc58448fad17178c27a\"\u003e\u003ccode\u003eff646fd\u003c/code\u003e\u003c/a\u003e Bump docker/login-action from 3.6.0 to 3.7.0 (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1353\"\u003e#1353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/c0def6c7ebab60f98c28ba759d488f4fbe6dae89\"\u003e\u003ccode\u003ec0def6c\u003c/code\u003e\u003c/a\u003e chore: fixed some typos in comments (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1351\"\u003e#1351\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/PyCQA/bandit/compare/1.9.3...1.9.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pip-audit` from 2.10.0 to 2.10.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/pip-audit/releases\"\u003epip-audit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.10.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a \u003ccode\u003eKeyError\u003c/code\u003e crash when an OSV vulnerability record contains an\n\u003ccode\u003eaffected\u003c/code\u003e entry that omits the optional \u003ccode\u003eranges\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/pip-audit/blob/main/CHANGELOG.md\"\u003epip-audit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[2.10.1]\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a \u003ccode\u003eKeyError\u003c/code\u003e crash when an OSV vulnerability record contains an\n\u003ccode\u003eaffected\u003c/code\u003e entry that omits the optional \u003ccode\u003eranges\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/8894eb8cee033531a1fbd9f2fb160892531c14e3\"\u003e\u003ccode\u003e8894eb8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1056\"\u003e#1056\u003c/a\u003e from pypa/copilot/release-2101\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/1c625b7f4fd5790e6a05723b2ad9e670629a061d\"\u003e\u003ccode\u003e1c625b7\u003c/code\u003e\u003c/a\u003e Update version in README.md to 2.10.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/fd2094bb7b58438176d65722d77c021750a16f84\"\u003e\u003ccode\u003efd2094b\u003c/code\u003e\u003c/a\u003e Prep 2.10.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/58d24880a0053c9ec3ce7e3c35aef6d51d600921\"\u003e\u003ccode\u003e58d2488\u003c/code\u003e\u003c/a\u003e build(deps): bump github/codeql-action from 4.35.2 to 4.36.1 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1052\"\u003e#1052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/8df942058831baec6258f712d42a0bcb03729134\"\u003e\u003ccode\u003e8df9420\u003c/code\u003e\u003c/a\u003e build(deps): bump zizmorcore/zizmor-action from 0.5.3 to 0.5.6 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1044\"\u003e#1044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/3f618d3cde900cd89545d6a3fa4d41612f3b83df\"\u003e\u003ccode\u003e3f618d3\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1053\"\u003e#1053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/4849132c9ec7a2b0b160ec4276408659d0cdcede\"\u003e\u003ccode\u003e4849132\u003c/code\u003e\u003c/a\u003e Restrict OIDC token to publish job (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1050\"\u003e#1050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/c1eb69a71306be7a3ffbbf2bdb59a4cb4eeaa414\"\u003e\u003ccode\u003ec1eb69a\u003c/code\u003e\u003c/a\u003e Fix KeyError when OSV affected entry omits optional \u003ccode\u003eranges\u003c/code\u003e field (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/68de07fb9637027f61df7df2620da93f9deb11ec\"\u003e\u003ccode\u003e68de07f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1054\"\u003e#1054\u003c/a\u003e from pypa/fix/1047\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/ef31c9ea7ae844d6f9c1f85efceb9d4a2533ef5a\"\u003e\u003ccode\u003eef31c9e\u003c/code\u003e\u003c/a\u003e Formatting fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/pip-audit/compare/v2.10.0...v2.10.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 4.5.1 to 4.7.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.7.0\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks during commit with \u003ccode\u003e-a\u003c/code\u003e or inside a submodule.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3773\"\u003e#3773\u003c/a\u003e issue by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e PR by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.6.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks that contain \u003ccode\u003e\u0026quot;scripts\u0026quot;: {\u0026quot;build\u0026quot;: ...}\u003c/code\u003e with\nnpm 11.x.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3737\"\u003e#3737\u003c/a\u003e issue by \u003ca href=\"https://github.com/mheiges\"\u003e\u003ccode\u003e@​mheiges\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.6.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInstall \u003ccode\u003elanguage: node\u003c/code\u003e hooks via \u003ccode\u003egit\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003eFixes npm 12.x compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3719\"\u003e#3719\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3517\"\u003e#3517\u003c/a\u003e issue by \u003ca href=\"https://github.com/ojob\"\u003e\u003ccode\u003e@​ojob\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003eJULIA_DEPOT_PATH\u003c/code\u003e for \u003ccode\u003elanguage: julia\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3711\"\u003e#3711\u003c/a\u003e PR by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit-ci/runner-image/issues/335\"\u003epre-commit-ci/runner-image#335\u003c/a\u003e issue by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eProduce error on mistyped \u003ccode\u003e--repo\u003c/code\u003e for \u003ccode\u003epre-commit autoupdate\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3701\"\u003e#3701\u003c/a\u003e PR by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3695\"\u003e#3695\u003c/a\u003e issue by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eImprove performance of commit existence check in \u003ccode\u003epre-push\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3726\"\u003e#3726\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3604\"\u003e#3604\u003c/a\u003e issue by \u003ca href=\"https://github.com/ptarjan\"\u003e\u003ccode\u003e@​ptarjan\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAvoid duplicating conflicted filenames during \u003ccode\u003epre-commit run --all-files\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3727\"\u003e#3727\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3706\"\u003e#3706\u003c/a\u003e issue by \u003ca href=\"https://github.com/RomanValov\"\u003e\u003ccode\u003e@​RomanValov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.6.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier usage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.7.0 - 2026-10-12\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks during commit with \u003ccode\u003e-a\u003c/code\u003e or inside a submodule.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3773\"\u003e#3773\u003c/a\u003e issue by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e PR by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.6.2 - 2026-08-10\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks that contain \u003ccode\u003e\u0026quot;scripts\u0026quot;: {\u0026quot;build\u0026quot;: ...}\u003c/code\u003e with\nnpm 11.x.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3737\"\u003e#3737\u003c/a\u003e issue by \u003ca href=\"https://github.com/mheiges\"\u003e\u003ccode\u003e@​mheiges\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.6.1 - 2026-07-21\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInstall \u003ccode\u003elanguage: node\u003c/code\u003e hooks via \u003ccode\u003egit\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003eFixes npm 12.x compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3719\"\u003e#3719\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3517\"\u003e#3517\u003c/a\u003e issue by \u003ca href=\"https://github.com/ojob\"\u003e\u003ccode\u003e@​ojob\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003eJULIA_DEPOT_PATH\u003c/code\u003e for \u003ccode\u003elanguage: julia\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3711\"\u003e#3711\u003c/a\u003e PR by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit-ci/runner-image/issues/335\"\u003epre-commit-ci/runner-image#335\u003c/a\u003e issue by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eProduce error on mistyped \u003ccode\u003e--repo\u003c/code\u003e for \u003ccode\u003epre-commit autoupdate\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3701\"\u003e#3701\u003c/a\u003e PR by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3695\"\u003e#3695\u003c/a\u003e issue by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eImprove performance of commit existence check in \u003ccode\u003epre-push\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3726\"\u003e#3726\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3604\"\u003e#3604\u003c/a\u003e issue by \u003ca href=\"https://github.com/ptarjan\"\u003e\u003ccode\u003e@​ptarjan\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAvoid duplicating conflicted filenames during \u003ccode\u003epre-commit run --all-files\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3727\"\u003e#3727\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3706\"\u003e#3706\u003c/a\u003e issue by \u003ca href=\"https://github.com/RomanValov\"\u003e\u003ccode\u003e@​RomanValov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.6.0 - 2026-04-21\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier\nusage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/65bb884a567e8be6adc51e8bfbcf26f708eb35a2\"\u003e\u003ccode\u003e65bb884\u003c/code\u003e\u003c/a\u003e v4.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/73926c191e10d2ede0ca627632e6e697d8092a61\"\u003e\u003ccode\u003e73926c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e from cbirkhold/node-no-git-env-npm-install\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/860d07d18211a0154ffaa4e77bf2a43c2b2473a9\"\u003e\u003ccode\u003e860d07d\u003c/code\u003e\u003c/a\u003e don't leak GIT_* env into \u003ccode\u003enpm install\u003c/code\u003e for \u003ccode\u003elanguage: node\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9ad8a0a99acec306e6e9c32490b0088008b83069\"\u003e\u003ccode\u003e9ad8a0a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3775\"\u003e#3775\u003c/a\u003e from pre-commit/contextlib-chdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9905e88afc7d860ccf21fba40fc9f5f23e0e0100\"\u003e\u003ccode\u003e9905e88\u003c/code\u003e\u003c/a\u003e use contextlib.chdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/59cb7925317a3c548ccb8cb17bbfb09d81ac8367\"\u003e\u003ccode\u003e59cb792\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3771\"\u003e#3771\u003c/a\u003e from pre-commit/all-repos_autofix_py311-plus\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2be170142fb6e0f1402a8bf036b5c9f8dd27fd09\"\u003e\u003ccode\u003e2be1701\u003c/code\u003e\u003c/a\u003e remove triple-nested withs for 3.14 coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/4c8d22aa125e68c6f45b4f71359c1bd7942f844f\"\u003e\u003ccode\u003e4c8d22a\u003c/code\u003e\u003c/a\u003e py311+\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/c4292384c94590cd8e6c68f677d95e3675994602\"\u003e\u003ccode\u003ec429238\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3770\"\u003e#3770\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f49e251f379f2c704e1223a791766e2bc9c78602\"\u003e\u003ccode\u003ef49e251\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.5.1...v4.7.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/Patechoc/mapnificently/pull/4","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Patechoc%2Fmapnificently/issues/4","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4/packages"},{"uuid":"5961096201","node_id":"PR_kwDOS6QFYc8AAAABJyqWdw","number":348,"state":"closed","title":"chore(deps): Update pydantic requirement from \u003e=2.13.5 to \u003e=2.14.1","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":4,"pull_request":true,"closed_at":"2026-10-23T11:39:03.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-21T13:07:13.000Z","updated_at":"2026-10-23T11:39:06.000Z","time_to_close":167510,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Update","packages":[{"name":"pydantic","old_version":"\u003e=2.13.5","new_version":"\u003e=2.14.1","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pydantic](https://github.com/pydantic/pydantic) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...v2.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 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/baby-feelings/cyberattack_info_api/pull/348","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/baby-feelings%2Fcyberattack_info_api/issues/348","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/348/packages"},{"uuid":"5956080873","node_id":"PR_kwDOKznBOM8AAAABJuoZLQ","number":14469,"state":"closed","title":"Bump the python group with 14 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-10-21T07:24:19.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-21T07:14:07.000Z","updated_at":"2026-10-21T07:24:29.000Z","time_to_close":612,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":14,"packages":[{"name":"typer","old_version":"0.27.1","new_version":"0.27.3","repository_url":"https://github.com/fastapi/typer"},{"name":"fastapi","old_version":"0.141.1","new_version":"0.143.0","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.52.1","new_version":"0.54.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pydantic","old_version":"2.13.4","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"datasets","old_version":"4.3.0","new_version":"5.1.0","repository_url":"https://github.com/huggingface/datasets"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [typer](https://github.com/fastapi/typer), [huggingface-hub](https://github.com/huggingface/huggingface_hub), [fastapi](https://github.com/fastapi/fastapi), [uvicorn](https://github.com/Kludex/uvicorn), [pydantic](https://github.com/pydantic/pydantic), [datasets](https://github.com/huggingface/datasets), [ddgs](https://github.com/deedy5/ddgs), [cryptography](https://github.com/pyca/cryptography), pymupdf4llm, [transformers](https://github.com/huggingface/transformers), [bitsandbytes](https://github.com/bitsandbytes-foundation/bitsandbytes), [torch](https://github.com/pytorch/pytorch), [torchvision](https://github.com/pytorch/vision) and [setuptools-scm](https://github.com/pypa/setuptools-scm) to permit the latest version.\nUpdates `typer` from 0.27.1 to 0.27.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/typer/releases\"\u003etyper's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.27.3\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Escape terminal control characters in error messages. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1972\"\u003e#1972\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump pyjwt from 2.13.0 to 2.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1969\"\u003e#1969\u003c/a\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 urllib3 from 2.7.0 to 2.8.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1968\"\u003e#1968\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 11.0 to 11.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1924\"\u003e#1924\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 7 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1966\"\u003e#1966\u003c/a\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 cryptography from 48.0.1 to 50.0.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1920\"\u003e#1920\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1967\"\u003e#1967\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 3 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1965\"\u003e#1965\u003c/a\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 anyio from 4.12.0 to 4.14.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1959\"\u003e#1959\u003c/a\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✅ Fix flaky \u003ccode\u003eapp_dir\u003c/code\u003e and \u003ccode\u003elaunch\u003c/code\u003e tutorial tests under \u003ccode\u003exdist\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1951\"\u003e#1951\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1948\"\u003e#1948\u003c/a\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 annotated-doc from 0.0.4 to 0.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1949\"\u003e#1949\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1950\"\u003e#1950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1947\"\u003e#1947\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.27.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Create \u003ccode\u003eexceptions\u003c/code\u003e module and \u003ccode\u003eTyperException\u003c/code\u003e base class. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1942\"\u003e#1942\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix showing \u003ccode\u003efast\u003c/code\u003e button as external link in animated terminals in docs. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1912\"\u003e#1912\u003c/a\u003e by \u003ca href=\"https://github.com/phalberg\"\u003e\u003ccode\u003e@​phalberg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Bump setup-uv action to 10.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1940\"\u003e#1940\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👷 Migrate automatic labels to Latest Changes. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1931\"\u003e#1931\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Remove legacy label check. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1930\"\u003e#1930\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔐 Use PR Submit for pull requests. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1928\"\u003e#1928\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use GitHub CLI for Git authentication. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1927\"\u003e#1927\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use PR Push commit identity. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1926\"\u003e#1926\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒 Replace pre-commit PAT with PR Push. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1923\"\u003e#1923\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Remove Zensical docs cache. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1922\"\u003e#1922\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove the old Latest Changes workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1921\"\u003e#1921\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1917\"\u003e#1917\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 10.21.3 to 11.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1910\"\u003e#1910\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 5 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1916\"\u003e#1916\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/typer/blob/master/docs/release-notes.md\"\u003etyper's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.27.3 (2026-10-06)\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Escape terminal control characters in error messages. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1972\"\u003e#1972\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump pyjwt from 2.13.0 to 2.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1969\"\u003e#1969\u003c/a\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 urllib3 from 2.7.0 to 2.8.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1968\"\u003e#1968\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 11.0 to 11.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1924\"\u003e#1924\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 7 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1966\"\u003e#1966\u003c/a\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 cryptography from 48.0.1 to 50.0.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1920\"\u003e#1920\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1967\"\u003e#1967\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 3 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1965\"\u003e#1965\u003c/a\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 anyio from 4.12.0 to 4.14.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1959\"\u003e#1959\u003c/a\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✅ Fix flaky \u003ccode\u003eapp_dir\u003c/code\u003e and \u003ccode\u003elaunch\u003c/code\u003e tutorial tests under \u003ccode\u003exdist\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1951\"\u003e#1951\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1948\"\u003e#1948\u003c/a\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 annotated-doc from 0.0.4 to 0.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1949\"\u003e#1949\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1950\"\u003e#1950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1947\"\u003e#1947\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.27.2 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Create \u003ccode\u003eexceptions\u003c/code\u003e module and \u003ccode\u003eTyperException\u003c/code\u003e base class. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1942\"\u003e#1942\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix showing \u003ccode\u003efast\u003c/code\u003e button as external link in animated terminals in docs. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1912\"\u003e#1912\u003c/a\u003e by \u003ca href=\"https://github.com/phalberg\"\u003e\u003ccode\u003e@​phalberg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Bump setup-uv action to 10.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1940\"\u003e#1940\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👷 Migrate automatic labels to Latest Changes. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1931\"\u003e#1931\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Remove legacy label check. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1930\"\u003e#1930\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔐 Use PR Submit for pull requests. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1928\"\u003e#1928\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use GitHub CLI for Git authentication. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1927\"\u003e#1927\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use PR Push commit identity. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1926\"\u003e#1926\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒 Replace pre-commit PAT with PR Push. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1923\"\u003e#1923\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Remove Zensical docs cache. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1922\"\u003e#1922\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove the old Latest Changes workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1921\"\u003e#1921\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1917\"\u003e#1917\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 10.21.3 to 11.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1910\"\u003e#1910\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 5 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1916\"\u003e#1916\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/b15210b71a5b9b35be82a1ffdb172ef7b3a89d85\"\u003e\u003ccode\u003eb15210b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.27.3 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1973\"\u003e#1973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/8bfe6d1599d19fd2175722dc9b9cb576e331c43d\"\u003e\u003ccode\u003e8bfe6d1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/a74010f845e8771e574cc9a033cd53f449383c61\"\u003e\u003ccode\u003ea74010f\u003c/code\u003e\u003c/a\u003e 🐛 Escape terminal control characters in error messages (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1972\"\u003e#1972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/11b083b92126fb8e149ab9e7d5c9a0f5594dfe58\"\u003e\u003ccode\u003e11b083b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/910a474f3071012c3c512aad3b6e10c6e9af9dcf\"\u003e\u003ccode\u003e910a474\u003c/code\u003e\u003c/a\u003e ⬆ Bump pyjwt from 2.13.0 to 2.15.0 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1969\"\u003e#1969\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/33b1eec0e20df3695de0b4ad7af0dff89608b12b\"\u003e\u003ccode\u003e33b1eec\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/62f1d4acd95c52c12490d313d2dea27846d23f46\"\u003e\u003ccode\u003e62f1d4a\u003c/code\u003e\u003c/a\u003e ⬆ Bump urllib3 from 2.7.0 to 2.8.0 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1968\"\u003e#1968\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/ffc8b9ae61d98fd48d52494e3f7286fda763fbe5\"\u003e\u003ccode\u003effc8b9a\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/1b7ceee5da625df3c679a55f9e6d25e31ab5f5c2\"\u003e\u003ccode\u003e1b7ceee\u003c/code\u003e\u003c/a\u003e ⬆ Bump pymdown-extensions from 11.0 to 11.0.1 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1924\"\u003e#1924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/40c39c11ce29ea0272134a0a50b2668105cd714f\"\u003e\u003ccode\u003e40c39c1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/typer/compare/0.27.1...0.27.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `huggingface-hub` to 2.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/huggingface/huggingface_hub/releases\"\u003ehuggingface-hub's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[v2.2.0] \u003ccode\u003ehf jobs stats\u003c/code\u003e snapshots, download and \u003ccode\u003eHfFileSystem\u003c/code\u003e fixes\u003c/h2\u003e\n\u003cp\u003eA small release this week, mostly bug fixes and quality-of-life improvements. \u003ccode\u003ehf jobs stats\u003c/code\u003e now returns right away instead of streaming forever, concurrent downloads reliably use \u003ccode\u003ehf_xet\u003c/code\u003e, and \u003ccode\u003eHfFileSystem\u003c/code\u003e caching is more predictable. Two behavior changes are listed under \u003ca href=\"https://github.com/huggingface/huggingface_hub/blob/HEAD/#-breaking-changes\"\u003eBreaking changes\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003e📊 \u003ccode\u003ehf jobs stats\u003c/code\u003e prints a snapshot by default\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehf jobs stats\u003c/code\u003e used to stream metrics until the job finished, so scripts and agents calling it on a running job hung until their own timeout. It now prints the latest sample of each job once and exits, like \u003ccode\u003ehf jobs logs\u003c/code\u003e and \u003ccode\u003ehf spaces logs\u003c/code\u003e. Use \u003ccode\u003e-f/--follow\u003c/code\u003e for the previous live view. Snapshot output also supports \u003ccode\u003e--format json|agent|quiet\u003c/code\u003e, which outputs the raw API metrics.\u003c/p\u003e\n\u003cp\u003eOn the Python side, \u003ccode\u003eHfApi.fetch_job_metrics\u003c/code\u003e gets the same \u003ccode\u003efollow\u003c/code\u003e parameter as \u003ccode\u003efetch_job_logs\u003c/code\u003e. It defaults to \u003ccode\u003eFalse\u003c/code\u003e and returns only the current sample. Pass \u003ccode\u003efollow=True\u003c/code\u003e to stream until the job completes.\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003e\u0026gt;\u0026gt;\u0026gt; hf jobs stats 6ac3bd9afbc85ba6823a9ad4\r\nJOB ID                CPU % NUM CPU MEM % MEM USAGE      NET I/O         GPU UTIL % GPU MEM % GPU MEM USAGE\r\n--------------------- ----- ------- ----- -------------- --------------- ---------- --------- -------------\r\n6ac3bd9afbc85ba682... 0%    2.0     0.01% 1.0MB / 16.0GB 0.0bps / 0.0bps N/A        N/A       N/A\r\nHint: Use `hf jobs stats -f celinah/6ac3bd9afbc85ba6823a9ad4` to follow live stats.\r\n\u003ch1\u003eStream live stats until the job completes\u003c/h1\u003e\n\u003cp\u003e\u0026gt;\u0026gt;\u0026gt; hf jobs stats -f 6ac3bd9afbc85ba6823a9ad4\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003e\u0026gt;\u0026gt;\u0026gt; from huggingface_hub import fetch_job_metrics\r\n\u0026gt;\u0026gt;\u0026gt; for metrics in fetch_job_metrics(job_id=job.id, follow=True):\r\n...     print(metrics)\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOther Jobs fixes in this release: \u003ccode\u003ehf jobs logs\u003c/code\u003e and \u003ccode\u003ehf spaces logs\u003c/code\u003e without \u003ccode\u003e-f\u003c/code\u003e no longer hang while the job keeps printing, \u003ccode\u003ehf jobs stats\u003c/code\u003e no longer fails when one of the requested jobs has finished, and \u003ccode\u003ehf jobs stats --json\u003c/code\u003e prints \u003ccode\u003e[]\u003c/code\u003e when no job is running.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e[CLI] Snapshot by default in hf jobs stats, add -f/--follow by \u003ca href=\"https://github.com/hanouticelina\"\u003e\u003ccode\u003e@​hanouticelina\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5090\"\u003e#5090\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[CLI] Fix empty hf jobs stats --json output with no running jobs by \u003ca href=\"https://github.com/hanouticelina\"\u003e\u003ccode\u003e@​hanouticelina\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5094\"\u003e#5094\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[Jobs] Fix no-follow logs hanging while the job keeps printing by \u003ca href=\"https://github.com/hanouticelina\"\u003e\u003ccode\u003e@​hanouticelina\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5092\"\u003e#5092\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[Jobs] Ignore 406 from metrics endpoint for finished jobs by \u003ca href=\"https://github.com/hanouticelina\"\u003e\u003ccode\u003e@​hanouticelina\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5091\"\u003e#5091\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e📚 \u003cstrong\u003eDocumentation:\u003c/strong\u003e \u003ca href=\"https://huggingface.co/docs/huggingface_hub/main/en/guides/jobs\"\u003eJobs guide\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e⚡ Concurrent downloads always use \u003ccode\u003ehf_xet\u003c/code\u003e\u003c/h2\u003e\n\u003cp\u003eIn a fresh process, the first concurrent \u003ccode\u003ehf_hub_download\u003c/code\u003e calls could read a placeholder version for \u003ccode\u003ehf_xet\u003c/code\u003e while another thread was still looking it up. Those calls treated \u003ccode\u003ehf_xet\u003c/code\u003e as missing and downloaded through the plain HTTP path. This mostly affected parallel downloads such as \u003ccode\u003esnapshot_download\u003c/code\u003e, where some of the files skipped Xet. The version lookup is now cached only once it is resolved, so every download sees the real value.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix race in \u003ccode\u003e_get_version\u003c/code\u003e that makes concurrent downloads skip hf_xet by \u003ca href=\"https://github.com/BramVanroy\"\u003e\u003ccode\u003e@​BramVanroy\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5102\"\u003e#5102\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e📂 \u003ccode\u003eHfFileSystem\u003c/code\u003e cache fixes\u003c/h2\u003e\n\u003cp\u003eThree fixes to how \u003ccode\u003eHfFileSystem\u003c/code\u003e caches listings and missing paths:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003els()\u003c/code\u003e on a newly created empty bucket returns an empty list instead of raising \u003ccode\u003eFileNotFoundError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDirectory listings are now replaced in the cache instead of appended to. Before, \u003ccode\u003els()\u003c/code\u003e after \u003ccode\u003efind()\u003c/code\u003e or \u003ccode\u003els(refresh=True)\u003c/code\u003e could return duplicate entries, \u003ccode\u003erefresh=True\u003c/code\u003e kept deleted files, and listing a single bucket file cached it as the whole folder's listing.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eexists(path, refresh=True)\u003c/code\u003e and \u003ccode\u003einvalidate_cache(path)\u003c/code\u003e now clear cached \u0026quot;not found\u0026quot; results. Before, a repo, branch or bucket created in the same process stayed missing until a full \u003ccode\u003einvalidate_cache()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/acfdf30d99441317270cca6e9362dd7f9ff47c55\"\u003e\u003ccode\u003eacfdf30\u003c/code\u003e\u003c/a\u003e Release: v2.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/193d9d921f9c7a4b57cb664d89108bf50dcf06c6\"\u003e\u003ccode\u003e193d9d9\u003c/code\u003e\u003c/a\u003e Release: v2.2.0.rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/5be356510bbd151bc8310d9da989501cbe004779\"\u003e\u003ccode\u003e5be3565\u003c/code\u003e\u003c/a\u003e [Cache] Speed up delete_revisions with a set lookup (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5118\"\u003e#5118\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/dab6a964b1e522f50e6bd1dd6a0056b8bb8de5cc\"\u003e\u003ccode\u003edab6a96\u003c/code\u003e\u003c/a\u003e [CLI] Don't glob-expand arguments on Windows (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5117\"\u003e#5117\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/cca4d3a3bfe057911211a4857d5776d075a3bf6a\"\u003e\u003ccode\u003ecca4d3a\u003c/code\u003e\u003c/a\u003e [Download] Fix offline snapshot_download with a pinned revision (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5113\"\u003e#5113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/c6cc03e179191985b52e1f0956766d944b46a10b\"\u003e\u003ccode\u003ec6cc03e\u003c/code\u003e\u003c/a\u003e Fix argument name in raise_text_generation_error docstring (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5108\"\u003e#5108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/8abbfe56999a650d84e35204c0f4f71d16087bb8\"\u003e\u003ccode\u003e8abbfe5\u003c/code\u003e\u003c/a\u003e Fix race in \u003ccode\u003e_get_version\u003c/code\u003e that makes concurrent downloads skip hf_xet (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5102\"\u003e#5102\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/bb3a875b13b131d06a10325b2f07d6de4776966f\"\u003e\u003ccode\u003ebb3a875\u003c/code\u003e\u003c/a\u003e [Docs] Fix from_pretrained integration example (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5105\"\u003e#5105\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/cf992a93d6b7481158eac47469be763dcd8d58f0\"\u003e\u003ccode\u003ecf992a9\u003c/code\u003e\u003c/a\u003e [HfFileSystem] Make refresh=True clear cached not-found results (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/af741671a6e49296b22f1b827298b3c688769a48\"\u003e\u003ccode\u003eaf74167\u003c/code\u003e\u003c/a\u003e [Tests] Wait for bucket listings after writes (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/huggingface/huggingface_hub/compare/v1.32.0...v2.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi` from 0.141.1 to 0.143.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.143.0\u003c/h2\u003e\n\u003cp\u003eAutomatic OpenTelemetry exporter setup is now opt-in. If you rely on FastAPI to configure exporters from \u003ccode\u003eOTEL_*\u003c/code\u003e environment variables, set \u003ccode\u003eFASTAPI_OTEL_AUTO_CONFIGURE=true\u003c/code\u003e or use \u003ccode\u003eFastAPI(telemetry={\u0026quot;auto_configure\u0026quot;: True})\u003c/code\u003e to retain the previous behavior.\u003c/p\u003e\n\u003cp\u003eApplications that configure their own providers and exporters require no changes. FastAPI Cloud enables automatic setup for you.\u003c/p\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e💥 Require opt-in for automatic OpenTelemetry exporter setup. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16476\"\u003e#16476\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.142.4\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Isolate FastAPI telemetry for excluded requests. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16470\"\u003e#16470\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.142.3\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Cache OpenTelemetry tracers to preserve warning deduplication. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16468\"\u003e#16468\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📝 Remove HTML title from newsletter to avoid the tooltip. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16461\"\u003e#16461\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Embed the FastAPI and friends newsletter signup form. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16459\"\u003e#16459\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update skill, use Asyncer for blocking code in threads. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16420\"\u003e#16420\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for fr (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16436\"\u003e#16436\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16435\"\u003e#16435\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16434\"\u003e#16434\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16433\"\u003e#16433\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16432\"\u003e#16432\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16431\"\u003e#16431\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16430\"\u003e#16430\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16429\"\u003e#16429\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16428\"\u003e#16428\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16425\"\u003e#16425\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16426\"\u003e#16426\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16427\"\u003e#16427\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update Russian LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16449\"\u003e#16449\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👷 Fix deprecated command in \u003ccode\u003ebump-pre-commit-hooks\u003c/code\u003e workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16463\"\u003e#16463\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 sponsors: remove Render. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16457\"\u003e#16457\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔨 Use \u003ccode\u003egpt-6-astra\u003c/code\u003e model for translations. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16453\"\u003e#16453\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 14 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16447\"\u003e#16447\u003c/a\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 starlette from 1.6.0 to 1.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16440\"\u003e#16440\u003c/a\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 pyjwt from 2.13.0 to 2.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16423\"\u003e#16423\u003c/a\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 gitpython from 3.1.60 to 3.1.62. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16444\"\u003e#16444\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/f5c6e9b4f9cadc1bf0f9a1fd672e621206b63007\"\u003e\u003ccode\u003ef5c6e9b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.143.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16477\"\u003e#16477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/182c8b8c83a0c3f19b61e31e092570af7d4e637b\"\u003e\u003ccode\u003e182c8b8\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/af889e400baeb33c1594c84618a806c9c6a7f7ff\"\u003e\u003ccode\u003eaf889e4\u003c/code\u003e\u003c/a\u003e 💥 Require opt-in for automatic OpenTelemetry exporter setup (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16476\"\u003e#16476\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9269f17524e7990c39a9a1708db532810ceffc06\"\u003e\u003ccode\u003e9269f17\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.142.4 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16471\"\u003e#16471\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/78ede017de7ef596b91be036aa31ba331cf77bb6\"\u003e\u003ccode\u003e78ede01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4e31a07bafd08f247f39ab1e9144ba2a62395757\"\u003e\u003ccode\u003e4e31a07\u003c/code\u003e\u003c/a\u003e 🐛 Isolate FastAPI telemetry for excluded requests (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16470\"\u003e#16470\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb8dabcd4a7b44e180d7c258377ae4b0abf99bff\"\u003e\u003ccode\u003ecb8dabc\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.142.3 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16469\"\u003e#16469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/787dc561d524349a6eadca365d4f2844d66b1b9d\"\u003e\u003ccode\u003e787dc56\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/6eae2f3456c889ad791de38dd45c14e17de775d3\"\u003e\u003ccode\u003e6eae2f3\u003c/code\u003e\u003c/a\u003e 🐛 Cache OpenTelemetry tracers to preserve warning deduplication (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16468\"\u003e#16468\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/94918c1d40afb27065c64d523219ed2ad9822f76\"\u003e\u003ccode\u003e94918c1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.141.1...0.143.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.52.1 to 0.54.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.54.0\u003c/h2\u003e\n\u003ch2\u003e📨 Send metadata after the response body\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.54.0 adds response trailers and \u003ccode\u003e103 Early Hints\u003c/code\u003e to its experimental HTTP/2 implementation through \u003ccode\u003ezttp\u003c/code\u003e.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.54.0 \u0026quot;zttp\u0026gt;=0.0.34\u0026quot;\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend HTTP/2 response trailers\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e). The ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension lets applications send metadata, such as checksums, after the response body. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them. Multiple trailer messages are combined before completing the response.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental and opt-in.\u003c/strong\u003e Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Upgrade-based h2c and WebSockets over HTTP/2 remain unsupported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e💡 Hint at resources before the final response\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend \u003ccode\u003e103 Early Hints\u003c/code\u003e over HTTP/2\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e). Applications can use the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension to send resource hints before the final response. Each supplied link becomes a separate \u003ccode\u003eLink\u003c/code\u003e header.\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.53.0...0.54.0\"\u003e0.53.0...0.54.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.53.0\u003c/h2\u003e\n\u003ch2\u003e🌐 Opt-in HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.53.0 adds experimental HTTP/2 through \u003ccode\u003ezttp\u003c/code\u003e, alongside a new \u003ccode\u003ezuvloop\u003c/code\u003e integration and connection-handling improvements.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.53.0\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eServe HTTP/1.1 and HTTP/2 with \u003ccode\u003ezttp\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e). Install \u003ccode\u003ezttp\u003c/code\u003e, then enable HTTP/2 with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Uvicorn negotiates HTTP/2 over TLS with ALPN and supports cleartext prior knowledge.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental.\u003c/strong\u003e Upgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚙️ More event loop choice\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eRun Uvicorn with \u003ccode\u003ezuvloop\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e). Install \u003ccode\u003ezuvloop\u003c/code\u003e separately and select it explicitly with \u003ccode\u003e--loop zuvloop\u003c/code\u003e on CPython 3.14 or newer.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🛡️ More reliable connections and proxies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHonor \u003ccode\u003eConnection: close\u003c/code\u003e token lists\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e). Uvicorn now parses comma-separated tokens case-insensitively across HTTP implementations.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTrust IPv6 loopback proxies by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e). The default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value now includes \u003ccode\u003e::1\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKeep upgraded WebSockets alive\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e). Uvicorn cancels the HTTP keep-alive timer when the connection becomes a WebSocket.\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.52.4...0.53.0\"\u003e0.52.4...0.53.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\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.52.3...0.52.4\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/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.54.0 (September 24, 2026)\u003c/h2\u003e\n\u003cp\u003eHTTP/2 support remains experimental. Install \u003ccode\u003ezttp\u0026gt;=0.0.34\u003c/code\u003e and enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd HTTP/2 response trailers through the ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd HTTP/2 \u003ccode\u003e103 Early Hints\u003c/code\u003e through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.53.0 (September 14, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release adds experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e. Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\nUpgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003ezuvloop\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle comma-separated, case-insensitive \u003ccode\u003eConnection: close\u003c/code\u003e tokens across HTTP implementations (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTrust IPv6 loopback in the default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancel the HTTP keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.4 (August 18, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.3 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.2 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\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/3eb9a9ab9af69005c687728097461c1fd2a95db9\"\u003e\u003ccode\u003e3eb9a9a\u003c/code\u003e\u003c/a\u003e Version 0.54.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3161\"\u003e#3161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/cd7ef6d31c1a09a3653f326cda7813d35ffd6082\"\u003e\u003ccode\u003ecd7ef6d\u003c/code\u003e\u003c/a\u003e Remove races from supervisor tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3134\"\u003e#3134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a56c7cce64aaa37e5864f882a5cbce8aa1dac47a\"\u003e\u003ccode\u003ea56c7cc\u003c/code\u003e\u003c/a\u003e Support HTTP/2 response trailers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3146\"\u003e#3146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9bd4404cca9506e9ba4f46b69ef72d011ceef2bd\"\u003e\u003ccode\u003e9bd4404\u003c/code\u003e\u003c/a\u003e chore(deps): bump anyio from 4.13.0 to 4.14.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3145\"\u003e#3145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/21f39ef7988366f77fb3172569bd235ac5de34cc\"\u003e\u003ccode\u003e21f39ef\u003c/code\u003e\u003c/a\u003e Add HTTP/2 Early Hints support (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/421708fbc1a704dac8bd4053a7c4c0bf4d3704ee\"\u003e\u003ccode\u003e421708f\u003c/code\u003e\u003c/a\u003e Version 0.53.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3136\"\u003e#3136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/f1a1bff7be819f5724d6fdf86dfd448a97c62e23\"\u003e\u003ccode\u003ef1a1bff\u003c/code\u003e\u003c/a\u003e Unset the keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/63971ed952090438896e6eba7d07178b616d97cc\"\u003e\u003ccode\u003e63971ed\u003c/code\u003e\u003c/a\u003e Document HTTP/2 support (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3130\"\u003e#3130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7d1a0055aee5e281accc646b559ddd147486bf8a\"\u003e\u003ccode\u003e7d1a005\u003c/code\u003e\u003c/a\u003e Remove race from multiprocess health check test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3128\"\u003e#3128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/5ac6265a01ff6dcadb0e4250152c3deaf8a168a9\"\u003e\u003ccode\u003e5ac6265\u003c/code\u003e\u003c/a\u003e Add ::1 to FORWARDED_ALLOW_IPS (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.1...0.54.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.4 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `datasets` from 4.3.0 to 5.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/huggingface/datasets/releases\"\u003edatasets's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.1.0\u003c/h2\u003e\n\u003ch2\u003eNew Formats\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHarbor\u003c/strong\u003e ⚓: RL environments:\n\u003cul\u003e\n\u003cli\u003eAdd harbor benchmarks by \u003ca href=\"https://github.com/lhoestq\"\u003e\u003ccode\u003e@​lhoestq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8729\"\u003ehuggingface/datasets#8729\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVortex\u003c/strong\u003e 🌀: High performance columnar data\n\u003cul\u003e\n\u003cli\u003eAdd support for datasets backed by vortex file format by \u003ca href=\"https://github.com/robert3005\"\u003e\u003ccode\u003e@​robert3005\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8502\"\u003ehuggingface/datasets#8502\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBio formats\u003c/strong\u003e 🧬: store biological data like DNA sequences, protein chains, and 3D molecular structures\n\u003cul\u003e\n\u003cli\u003efeat(fasta): add lightweight FASTA file format support by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/7923\"\u003ehuggingface/datasets#7923\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDecode BioSequence and BioStructure records with universal newlines by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8600\"\u003ehuggingface/datasets#8600\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd lightweight FASTQ file format support by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/7924\"\u003ehuggingface/datasets#7924\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Add GenBank file format support for biological sequence data by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/7951\"\u003ehuggingface/datasets#7951\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd lightweight PDB (Protein Data Bank) file support by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/7926\"\u003ehuggingface/datasets#7926\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Add mmCIF file support for macromolecular structures by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/7925\"\u003ehuggingface/datasets#7925\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(features): add BioSequence and BioStructure decodable features by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8542\"\u003ehuggingface/datasets#8542\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDataset Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a strategy argument to split_dataset_by_node for iterable datasets by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8565\"\u003ehuggingface/datasets#8565\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow IterableDataset.push_to_hub num_shards above dataset.num_shards by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8716\"\u003ehuggingface/datasets#8716\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eOther improvements and bug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix fixed size binary by \u003ca href=\"https://github.com/Alex-PLACET\"\u003e\u003ccode\u003e@​Alex-PLACET\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8281\"\u003ehuggingface/datasets#8281\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix offline simulation with huggingface_hub 1.27 by \u003ca href=\"https://github.com/hanouticelina\"\u003e\u003ccode\u003e@​hanouticelina\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8414\"\u003ehuggingface/datasets#8414\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix info from data_dir/data_files or malformed yaml by \u003ca href=\"https://github.com/lhoestq\"\u003e\u003ccode\u003e@​lhoestq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8462\"\u003ehuggingface/datasets#8462\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eForward iter_arrow, is_typed and features from RepeatExamplesIterable by \u003ca href=\"https://github.com/ebarkhordar\"\u003e\u003ccode\u003e@​ebarkhordar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8395\"\u003ehuggingface/datasets#8395\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix archive path check allowing sibling-directory escapes by \u003ca href=\"https://github.com/icn5381\"\u003e\u003ccode\u003e@​icn5381\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8490\"\u003ehuggingface/datasets#8490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edisallow hdf5 external links by \u003ca href=\"https://github.com/lhoestq\"\u003e\u003ccode\u003e@​lhoestq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8523\"\u003ehuggingface/datasets#8523\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edeepcopy\u003c/code\u003e bottleneck in state_dict() by \u003ca href=\"https://github.com/yuxin00j\"\u003e\u003ccode\u003e@​yuxin00j\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8387\"\u003ehuggingface/datasets#8387\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eOptimize PyArrow block shuffling with dynamic rebatched chunk interleaving by \u003ca href=\"https://github.com/yuxin00j\"\u003e\u003ccode\u003e@​yuxin00j\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8407\"\u003ehuggingface/datasets#8407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Pdf.decode_example raising TypeError on remote non-Hub paths by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8566\"\u003ehuggingface/datasets#8566\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dead PDF processing link in README by \u003ca href=\"https://github.com/aarushkandukoori\"\u003e\u003ccode\u003e@​aarushkandukoori\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8512\"\u003ehuggingface/datasets#8512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eForward max_buffer_input_shards from IterableDatasetDict.shuffle by \u003ca href=\"https://github.com/vineethsaivs\"\u003e\u003ccode\u003e@​vineethsaivs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8594\"\u003ehuggingface/datasets#8594\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePreserve storage options across URL hops by \u003ca href=\"https://github.com/tandede\"\u003e\u003ccode\u003e@​tandede\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8496\"\u003ehuggingface/datasets#8496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBetter error when a column written as null gets values in a later batch by \u003ca href=\"https://github.com/ebarkhordar\"\u003e\u003ccode\u003e@​ebarkhordar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8591\"\u003ehuggingface/datasets#8591\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdvance the user-supplied generator in Dataset.shuffle even on cache hits by \u003ca href=\"https://github.com/BenYang12\"\u003e\u003ccode\u003e@​BenYang12\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8589\"\u003ehuggingface/datasets#8589\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump fsspec upper bound to 2026.7.0 by \u003ca href=\"https://github.com/roshanjrajan\"\u003e\u003ccode\u003e@​roshanjrajan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8561\"\u003ehuggingface/datasets#8561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShard the sources when skipping a distributed IterableDataset by \u003ca href=\"https://github.com/ebarkhordar\"\u003e\u003ccode\u003e@​ebarkhordar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8569\"\u003ehuggingface/datasets#8569\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix infinite repetition of empty iterable datasets by \u003ca href=\"https://github.com/Jokasa7\"\u003e\u003ccode\u003e@​Jokasa7\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8577\"\u003ehuggingface/datasets#8577\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject a non-callable generator in GeneratorConfig by \u003ca href=\"https://github.com/LeSingh1\"\u003e\u003ccode\u003e@​LeSingh1\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8585\"\u003ehuggingface/datasets#8585\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix async map checkpoint accounting across repeated resumes by \u003ca href=\"https://github.com/SBrouck\"\u003e\u003ccode\u003e@​SBrouck\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8575\"\u003ehuggingface/datasets#8575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[httpx migration] Import httpx from huggingface_hub, require huggingface_hub\u0026gt;=1.31.0 by \u003ca href=\"https://github.com/Wauplin\"\u003e\u003ccode\u003e@​Wauplin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8598\"\u003ehuggingface/datasets#8598\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: enable Dependabot weekly GitHub Actions bumps by \u003ca href=\"https://github.com/hf-dependantbot-rollout\"\u003e\u003ccode\u003e@​hf-dependantbot-rollout\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8221\"\u003ehuggingface/datasets#8221\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[docs] Fix legacy hf CLI references (datasets) by \u003ca href=\"https://github.com/Wauplin\"\u003e\u003ccode\u003e@​Wauplin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8657\"\u003ehuggingface/datasets#8657\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eScope GITHUB_TOKEN permissions per job by \u003ca href=\"https://github.com/hf-s...\n\n_Description has been truncated_","html_url":"https://github.com/unslothai/unsloth/pull/14469","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/unslothai%2Funsloth/issues/14469","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14469/packages"},{"uuid":"5951580627","node_id":"PR_kwDOQ3AX588AAAABJrFerA","number":585,"state":"open","title":"chore(deps)(deps): bump the production-dependencies group across 1 directory with 3 updates","user":"dependabot[bot]","labels":["automated","dependencies"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-20T23:45:47.000Z","updated_at":"2026-10-21T00:29:02.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)(deps): bump","group_name":"production-dependencies","update_count":3,"packages":[{"name":"google-adk","old_version":"2.11.0","new_version":"2.12.0","repository_url":"https://github.com/google/adk-python"},{"name":"litellm","old_version":"1.103.2","new_version":"1.105.0","repository_url":"https://github.com/BerriAI/litellm"},{"name":"pydantic","old_version":"2.13.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 3 updates in the / directory: [google-adk](https://github.com/google/adk-python), [litellm](https://github.com/BerriAI/litellm) and [pydantic](https://github.com/pydantic/pydantic).\n\nUpdates `google-adk` from 2.11.0 to 2.12.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/google/adk-python/releases\"\u003egoogle-adk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.12.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/google/adk-python/compare/v2.11.0...v2.12.0\"\u003e2.12.0\u003c/a\u003e (2026-10-13)\u003c/h2\u003e\n\u003ch3\u003eHighlights\u003c/h3\u003e\n\u003cp\u003eThis release enhances execution performance in long sessions while introducing finer control over tool execution, workflow approvals, and deployment security.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePerformance\u003c/strong\u003e: Cut time to first model request by 40% in long sessions. (\u003ca href=\"https://github.com/google/adk-python/commit/1754b3eeb6cdb2c16e3b30619a12066623df132e\"\u003e1754b3e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTools\u003c/strong\u003e: Intercept and filter tool outputs before returning them to the model using \u003ccode\u003eafter_tool_callback\u003c/code\u003e. (\u003ca href=\"https://github.com/google/adk-python/commit/fdda17cbcfec35a1cca1638b028c1af98e893eae\"\u003efdda17c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWorkflows\u003c/strong\u003e: Require human confirmation before executing workflow nodes via \u003ccode\u003erequire_confirmation\u003c/code\u003e. (\u003ca href=\"https://github.com/google/adk-python/commit/988fd1a73d174f9e3acb6d2e1bec102f9ec02238\"\u003e988fd1a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDeployment\u003c/strong\u003e: Deploy agents to Agent Engine using dedicated custom service accounts. (\u003ca href=\"https://github.com/google/adk-python/commit/629e11996ebb544ea6b0f652e413955b2dfedeb6\"\u003e629e119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.15\u003c/strong\u003e: Install and run ADK on Python 3.15. (\u003ca href=\"https://github.com/google/adk-python/commit/75aef1ec133c92c9e35f0575392ef5c4e3910b31\"\u003e75aef1e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd --state_file option to adk run (\u003ca href=\"https://github.com/google/adk-python/commit/c390266b51204a1bc59f6671d2674ba6ca1e79ad\"\u003ec390266\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/7083\"\u003e#7083\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd after_tool_callback to screen tool output (\u003ca href=\"https://github.com/google/adk-python/commit/fdda17cbcfec35a1cca1638b028c1af98e893eae\"\u003efdda17c\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/6966\"\u003e#6966\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd skill-level security support to AgentCardBuilder (\u003ca href=\"https://github.com/google/adk-python/commit/79a7e49cd656c1650945e87a955a096c06c09494\"\u003e79a7e49\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eagents:\u003c/strong\u003e adapt BaseNode in tool consumers and preserve ToolUnion compatibility (\u003ca href=\"https://github.com/google/adk-python/commit/8350c143da8837426f18ad75027984fdaacc856b\"\u003e8350c14\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eantigravity:\u003c/strong\u003e preserve model thinking parts, client tool responses, and sub-agent hierarchy in ADK events (\u003ca href=\"https://github.com/google/adk-python/commit/fac77be5d32cf8b07db0162fdd73f5f9155f60bf\"\u003efac77be\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecli:\u003c/strong\u003e source the agent builder assistant's ADK knowledge from the installed package (\u003ca href=\"https://github.com/google/adk-python/commit/ab9fffc9e000c2e5e417f5a66c14cb53250f1511\"\u003eab9fffc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003econtinue with de-identified text when only SDP matched (\u003ca href=\"https://github.com/google/adk-python/commit/315c3dd2cd2710b3ccc2fbb88c22125938d89adf\"\u003e315c3dd\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/7369\"\u003e#7369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eencrypt google credential in session (\u003ca href=\"https://github.com/google/adk-python/commit/42a17a9fd2f14d466f8903f2ba776c90e871455f\"\u003e42a17a9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eeval:\u003c/strong\u003e report the efficiency metrics for evals run from the Dev UI (\u003ca href=\"https://github.com/google/adk-python/commit/49bf291ce63c4756a45dce2f9070053e7ac212ff\"\u003e49bf291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003einstall lightweight Gemini Enterprise (Agent Platform) SDK without the GAPIC stack (\u003ca href=\"https://github.com/google/adk-python/commit/d92735dc71700905a4e72a8d2e5c5ae8ce054a04\"\u003ed92735d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elive:\u003c/strong\u003e add an internal model for Live background tool calls (\u003ca href=\"https://github.com/google/adk-python/commit/3f25ab50227104338f79df3bab6390b0f597e478\"\u003e3f25ab5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elive:\u003c/strong\u003e implement CascadeLive model \u0026amp; sample (\u003ca href=\"https://github.com/google/adk-python/commit/128faabb6dddacf26e029aa8c28c903c3a7a6b61\"\u003e128faab\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emigrate ADK to google-cloud-aiplatform v2.2 (agentplatform) (\u003ca href=\"https://github.com/google/adk-python/commit/77d4dcd0aa8c7ff841160f3c0db3754c347dfc1f\"\u003e77d4dcd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emigrate VertexAiExampleStore and VertexAiRagRetrieval away from vertexai.preview (\u003ca href=\"https://github.com/google/adk-python/commit/9e411be81c5ad9e28ea892362c2ec4f76982f680\"\u003e9e411be\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003epersist skill-script outputs as artifacts (\u003ca href=\"https://github.com/google/adk-python/commit/beaef0d807e6759489afd72995451486c0a4cca3\"\u003ebeaef0d\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/5579\"\u003e#5579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eplugins:\u003c/strong\u003e add on_schema_error and on_schema_ready callback hooks to BigQueryLoggerConfig (\u003ca href=\"https://github.com/google/adk-python/commit/4d31fa98b03efa2cabfaa05d20039e286db06f86\"\u003e4d31fa9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eplugins:\u003c/strong\u003e enrich AGENT_STARTING metadata in BigQueryAgentAnalyticsPlugin (\u003ca href=\"https://github.com/google/adk-python/commit/c32ad3bdb4b6f928d764999654ce012187a81faf\"\u003ec32ad3b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eprint next steps after adk create (\u003ca href=\"https://github.com/google/adk-python/commit/06b78477a5fab38c8a9094afa078c9bcf7ef9230\"\u003e06b7847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eresume Gemini generations paused with a continuation token (\u003ca href=\"https://github.com/google/adk-python/commit/b3cbb4727727f5bc60e0161e850ce6c105cca952\"\u003eb3cbb47\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eskills:\u003c/strong\u003e migrate GCPSkillRegistry.search_skills from GET to POST (\u003ca href=\"https://github.com/google/adk-python/commit/e9464ca8ece72fdedabd0ec3591ebbf8f8c0443d\"\u003ee9464ca\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esupport custom service accounts for agent engine deploy (\u003ca href=\"https://github.com/google/adk-python/commit/629e11996ebb544ea6b0f652e413955b2dfedeb6\"\u003e629e119\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/2951\"\u003e#2951\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etelemetry:\u003c/strong\u003e name skill tool spans after the skill they touch (\u003ca href=\"https://github.com/google/adk-python/commit/c11060cca66c880050091064fb1b8b12734e802f\"\u003ec11060c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e run a sync FunctionNode tool's callable on the tool thread pool (\u003ca href=\"https://github.com/google/adk-python/commit/71d5ed77382865c419a57692d68c296866efe2e5\"\u003e71d5ed7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e run non-live generator FunctionTools via FunctionNode (\u003ca href=\"https://github.com/google/adk-python/commit/0ee891a53b3c45908d3a6abcc44e165840159e5c\"\u003e0ee891a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e tag model_consult advisor requests with client label (\u003ca href=\"https://github.com/google/adk-python/commit/068610f272ecfe3d235ea5995e5168609d41d94b\"\u003e068610f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euser feedback survey workflow (\u003ca href=\"https://github.com/google/adk-python/commit/f5efa2a3a229a2bc85cf765fe859a61c030b6bf0\"\u003ef5efa2a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003evmaas:\u003c/strong\u003e add sandbox lifecycle helpers to the sandbox manager (\u003ca href=\"https://github.com/google/adk-python/commit/46dff4b904a387100c64760edf09bc69da8cbba2\"\u003e46dff4b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003evmaas:\u003c/strong\u003e find or create sandbox templates per container config (\u003ca href=\"https://github.com/google/adk-python/commit/650394f06817acf04a1ee7572da18c57d5d8abc5\"\u003e650394f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkflow:\u003c/strong\u003e run a sync generator FunctionNode's steps on the tool thread pool (\u003ca href=\"https://github.com/google/adk-python/commit/8112f4a885f441f1f4b32e5f7d33fb13a75188ae\"\u003e8112f4a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkflow:\u003c/strong\u003e support require_confirmation in \u003ccode\u003e@node\u003c/code\u003e and FunctionNode (\u003ca href=\"https://github.com/google/adk-python/commit/988fd1a73d174f9e3acb6d2e1bec102f9ec02238\"\u003e988fd1a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkflow:\u003c/strong\u003e support scalar auto-boxing for ToolNode input (\u003ca href=\"https://github.com/google/adk-python/commit/873eed5f102003c80368e19a3c46637d4075f04d\"\u003e873eed5\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/google/adk-python/blob/main/CHANGELOG.md\"\u003egoogle-adk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/google/adk-python/compare/v2.11.0...v2.12.0\"\u003e2.12.0\u003c/a\u003e (2026-10-13)\u003c/h2\u003e\n\u003ch3\u003eHighlights\u003c/h3\u003e\n\u003cp\u003eThis release enhances execution performance in long sessions while introducing finer control over tool execution, workflow approvals, and deployment security.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePerformance\u003c/strong\u003e: Cut time to first model request by 40% in long sessions. (\u003ca href=\"https://github.com/google/adk-python/commit/1754b3eeb6cdb2c16e3b30619a12066623df132e\"\u003e1754b3e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTools\u003c/strong\u003e: Intercept and filter tool outputs before returning them to the model using \u003ccode\u003eafter_tool_callback\u003c/code\u003e. (\u003ca href=\"https://github.com/google/adk-python/commit/fdda17cbcfec35a1cca1638b028c1af98e893eae\"\u003efdda17c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWorkflows\u003c/strong\u003e: Require human confirmation before executing workflow nodes via \u003ccode\u003erequire_confirmation\u003c/code\u003e. (\u003ca href=\"https://github.com/google/adk-python/commit/988fd1a73d174f9e3acb6d2e1bec102f9ec02238\"\u003e988fd1a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDeployment\u003c/strong\u003e: Deploy agents to Agent Engine using dedicated custom service accounts. (\u003ca href=\"https://github.com/google/adk-python/commit/629e11996ebb544ea6b0f652e413955b2dfedeb6\"\u003e629e119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.15\u003c/strong\u003e: Install and run ADK on Python 3.15. (\u003ca href=\"https://github.com/google/adk-python/commit/75aef1ec133c92c9e35f0575392ef5c4e3910b31\"\u003e75aef1e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd --state_file option to adk run (\u003ca href=\"https://github.com/google/adk-python/commit/c390266b51204a1bc59f6671d2674ba6ca1e79ad\"\u003ec390266\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/7083\"\u003e#7083\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd after_tool_callback to screen tool output (\u003ca href=\"https://github.com/google/adk-python/commit/fdda17cbcfec35a1cca1638b028c1af98e893eae\"\u003efdda17c\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/6966\"\u003e#6966\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd skill-level security support to AgentCardBuilder (\u003ca href=\"https://github.com/google/adk-python/commit/79a7e49cd656c1650945e87a955a096c06c09494\"\u003e79a7e49\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eagents:\u003c/strong\u003e adapt BaseNode in tool consumers and preserve ToolUnion compatibility (\u003ca href=\"https://github.com/google/adk-python/commit/8350c143da8837426f18ad75027984fdaacc856b\"\u003e8350c14\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eantigravity:\u003c/strong\u003e preserve model thinking parts, client tool responses, and sub-agent hierarchy in ADK events (\u003ca href=\"https://github.com/google/adk-python/commit/fac77be5d32cf8b07db0162fdd73f5f9155f60bf\"\u003efac77be\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecli:\u003c/strong\u003e source the agent builder assistant's ADK knowledge from the installed package (\u003ca href=\"https://github.com/google/adk-python/commit/ab9fffc9e000c2e5e417f5a66c14cb53250f1511\"\u003eab9fffc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003econtinue with de-identified text when only SDP matched (\u003ca href=\"https://github.com/google/adk-python/commit/315c3dd2cd2710b3ccc2fbb88c22125938d89adf\"\u003e315c3dd\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/7369\"\u003e#7369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eencrypt google credential in session (\u003ca href=\"https://github.com/google/adk-python/commit/42a17a9fd2f14d466f8903f2ba776c90e871455f\"\u003e42a17a9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eeval:\u003c/strong\u003e report the efficiency metrics for evals run from the Dev UI (\u003ca href=\"https://github.com/google/adk-python/commit/49bf291ce63c4756a45dce2f9070053e7ac212ff\"\u003e49bf291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003einstall lightweight Gemini Enterprise (Agent Platform) SDK without the GAPIC stack (\u003ca href=\"https://github.com/google/adk-python/commit/d92735dc71700905a4e72a8d2e5c5ae8ce054a04\"\u003ed92735d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elive:\u003c/strong\u003e add an internal model for Live background tool calls (\u003ca href=\"https://github.com/google/adk-python/commit/3f25ab50227104338f79df3bab6390b0f597e478\"\u003e3f25ab5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elive:\u003c/strong\u003e implement CascadeLive model \u0026amp; sample (\u003ca href=\"https://github.com/google/adk-python/commit/128faabb6dddacf26e029aa8c28c903c3a7a6b61\"\u003e128faab\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emigrate ADK to google-cloud-aiplatform v2.2 (agentplatform) (\u003ca href=\"https://github.com/google/adk-python/commit/77d4dcd0aa8c7ff841160f3c0db3754c347dfc1f\"\u003e77d4dcd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emigrate VertexAiExampleStore and VertexAiRagRetrieval away from vertexai.preview (\u003ca href=\"https://github.com/google/adk-python/commit/9e411be81c5ad9e28ea892362c2ec4f76982f680\"\u003e9e411be\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003epersist skill-script outputs as artifacts (\u003ca href=\"https://github.com/google/adk-python/commit/beaef0d807e6759489afd72995451486c0a4cca3\"\u003ebeaef0d\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/5579\"\u003e#5579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eplugins:\u003c/strong\u003e add on_schema_error and on_schema_ready callback hooks to BigQueryLoggerConfig (\u003ca href=\"https://github.com/google/adk-python/commit/4d31fa98b03efa2cabfaa05d20039e286db06f86\"\u003e4d31fa9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eplugins:\u003c/strong\u003e enrich AGENT_STARTING metadata in BigQueryAgentAnalyticsPlugin (\u003ca href=\"https://github.com/google/adk-python/commit/c32ad3bdb4b6f928d764999654ce012187a81faf\"\u003ec32ad3b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eprint next steps after adk create (\u003ca href=\"https://github.com/google/adk-python/commit/06b78477a5fab38c8a9094afa078c9bcf7ef9230\"\u003e06b7847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eresume Gemini generations paused with a continuation token (\u003ca href=\"https://github.com/google/adk-python/commit/b3cbb4727727f5bc60e0161e850ce6c105cca952\"\u003eb3cbb47\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eskills:\u003c/strong\u003e migrate GCPSkillRegistry.search_skills from GET to POST (\u003ca href=\"https://github.com/google/adk-python/commit/e9464ca8ece72fdedabd0ec3591ebbf8f8c0443d\"\u003ee9464ca\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esupport custom service accounts for agent engine deploy (\u003ca href=\"https://github.com/google/adk-python/commit/629e11996ebb544ea6b0f652e413955b2dfedeb6\"\u003e629e119\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/2951\"\u003e#2951\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etelemetry:\u003c/strong\u003e name skill tool spans after the skill they touch (\u003ca href=\"https://github.com/google/adk-python/commit/c11060cca66c880050091064fb1b8b12734e802f\"\u003ec11060c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e run a sync FunctionNode tool's callable on the tool thread pool (\u003ca href=\"https://github.com/google/adk-python/commit/71d5ed77382865c419a57692d68c296866efe2e5\"\u003e71d5ed7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e run non-live generator FunctionTools via FunctionNode (\u003ca href=\"https://github.com/google/adk-python/commit/0ee891a53b3c45908d3a6abcc44e165840159e5c\"\u003e0ee891a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e tag model_consult advisor requests with client label (\u003ca href=\"https://github.com/google/adk-python/commit/068610f272ecfe3d235ea5995e5168609d41d94b\"\u003e068610f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euser feedback survey workflow (\u003ca href=\"https://github.com/google/adk-python/commit/f5efa2a3a229a2bc85cf765fe859a61c030b6bf0\"\u003ef5efa2a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003evmaas:\u003c/strong\u003e add sandbox lifecycle helpers to the sandbox manager (\u003ca href=\"https://github.com/google/adk-python/commit/46dff4b904a387100c64760edf09bc69da8cbba2\"\u003e46dff4b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003evmaas:\u003c/strong\u003e find or create sandbox templates per container config (\u003ca href=\"https://github.com/google/adk-python/commit/650394f06817acf04a1ee7572da18c57d5d8abc5\"\u003e650394f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkflow:\u003c/strong\u003e run a sync generator FunctionNode's steps on the tool thread pool (\u003ca href=\"https://github.com/google/adk-python/commit/8112f4a885f441f1f4b32e5f7d33fb13a75188ae\"\u003e8112f4a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkflow:\u003c/strong\u003e support require_confirmation in \u003ccode\u003e@node\u003c/code\u003e and FunctionNode (\u003ca href=\"https://github.com/google/adk-python/commit/988fd1a73d174f9e3acb6d2e1bec102f9ec02238\"\u003e988fd1a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkflow:\u003c/strong\u003e support scalar auto-boxing for ToolNode input (\u003ca href=\"https://github.com/google/adk-python/commit/873eed5f102003c80368e19a3c46637d4075f04d\"\u003e873eed5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkflow:\u003c/strong\u003e support task sub-agent delegation and resume in task-mode wrapper (\u003ca href=\"https://github.com/google/adk-python/commit/8d716351ec9ec5fb7a51e4c62cac19458906560d\"\u003e8d71635\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/google/adk-python/commit/38381f65f2bee0f70a89f938ee64e51b34916fa7\"\u003e\u003ccode\u003e38381f6\u003c/code\u003e\u003c/a\u003e chore: update last-release-sha for next main release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/de153fb3f0c76e684786ddd06fc5027ee38d46f1\"\u003e\u003ccode\u003ede153fb\u003c/code\u003e\u003c/a\u003e chore(release/candidate): release 2.12.0 (\u003ca href=\"https://redirect.github.com/google/adk-python/issues/7522\"\u003e#7522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/cfc5854ef4bd77301d1219e29da5182d7bbffc42\"\u003e\u003ccode\u003ecfc5854\u003c/code\u003e\u003c/a\u003e chore: release as 2.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/e9b74d36140f2594b24c481fb7a3825b2cb01e96\"\u003e\u003ccode\u003ee9b74d3\u003c/code\u003e\u003c/a\u003e build: pin a pydantic with Python 3.15 wheels in constraints-3.15.txt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/c213adf02d491726037b9dcceecbc4106dbd2aa6\"\u003e\u003ccode\u003ec213adf\u003c/code\u003e\u003c/a\u003e fix: add namespaced mode for forwarded A2A session context_id\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/62745ccc62513514bc0f30f5cfdaf1c593d156ca\"\u003e\u003ccode\u003e62745cc\u003c/code\u003e\u003c/a\u003e fix: skip ignored params' annotations on the legacy declaration path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/a3443505203ecdcaa1141434ef0ecd0006b95f31\"\u003e\u003ccode\u003ea344350\u003c/code\u003e\u003c/a\u003e fix: cancel and await parallel tool tasks on BaseException and GeneratorExit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/8350c143da8837426f18ad75027984fdaacc856b\"\u003e\u003ccode\u003e8350c14\u003c/code\u003e\u003c/a\u003e feat(agents): adapt BaseNode in tool consumers and preserve ToolUnion compati...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/6a3828325b6f9feb429aa9e73e86837ad9acecdd\"\u003e\u003ccode\u003e6a38283\u003c/code\u003e\u003c/a\u003e fix: name the missing pandas package in VertexAiExampleStore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/f92d8a8f2280350d9ba13c787bac796001753bb7\"\u003e\u003ccode\u003ef92d8a8\u003c/code\u003e\u003c/a\u003e refactor: let the GenAI SDK resume paused Gemini generations\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/google/adk-python/compare/v2.11.0...v2.12.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `litellm` from 1.103.2 to 1.105.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/BerriAI/litellm/releases\"\u003elitellm's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.105.0\u003c/h2\u003e\n\u003ch2\u003eVerify Docker Image Signature\u003c/h2\u003e\n\u003cp\u003eAll LiteLLM Docker images are signed with \u003ca href=\"https://docs.sigstore.dev/cosign/overview/\"\u003ecosign\u003c/a\u003e. Every release is signed with the same key introduced in \u003ca href=\"https://github.com/BerriAI/litellm/commit/0112e53046018d726492c814b3644b7d376029d0\"\u003ecommit \u003ccode\u003e0112e53\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eVerify using the pinned commit hash (recommended):\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eA commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key:\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003ecosign verify \\\n  --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \\\n  ghcr.io/berriai/litellm:v1.105.0\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eVerify using the release tag (convenience):\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eTags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules:\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003ecosign verify \\\n  --key https://raw.githubusercontent.com/BerriAI/litellm/v1.105.0/cosign.pub \\\n  ghcr.io/berriai/litellm:v1.105.0\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eExpected output:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eThe following checks were performed on each of these signatures:\n  - The cosign claims were validated\n  - The signatures were verified against the specified public key\n\u003c/code\u003e\u003c/pre\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat(mcp): share compatibility-aware result conversion across tool surfaces by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43089\"\u003eBerriAI/litellm#43089\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(caching): propagate auth cache invalidation over Redis Cluster via a node-level pub/sub client by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43110\"\u003eBerriAI/litellm#43110\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(model-catalog): add Rust registry validation by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43136\"\u003eBerriAI/litellm#43136\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest(rust): reorganize core crate tests and split cache and OCR suites by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43177\"\u003eBerriAI/litellm#43177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(proxy): give SpendLogToolIndex its own share of the cleanup budget and log a per-run summary by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/41768\"\u003eBerriAI/litellm#41768\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(rust): hand upstream response headers to the native Messages stream by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43178\"\u003eBerriAI/litellm#43178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(testkit): agent clients for Claude Code, Codex and opencode by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43181\"\u003eBerriAI/litellm#43181\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: run migrated unit selections on every event in legacy GHA shards by \u003ca href=\"https://github.com/yuneng-berri\"\u003e\u003ccode\u003e@​yuneng-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43182\"\u003eBerriAI/litellm#43182\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: move tests/test_litellm root and small trees into tests/unit by \u003ca href=\"https://github.com/yuneng-berri\"\u003e\u003ccode\u003e@​yuneng-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43186\"\u003eBerriAI/litellm#43186\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(sso): gate /sso/debug routes behind ENABLE_SSO_DEBUG, off by default by \u003ca href=\"https://github.com/ojensen-berri\"\u003e\u003ccode\u003e@​ojensen-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43150\"\u003eBerriAI/litellm#43150\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor(framer): replace Framer trait with tokio-util codecs by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43193\"\u003eBerriAI/litellm#43193\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(anthropic): surface Responses bridge stream failures as Anthropic error events by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43126\"\u003eBerriAI/litellm#43126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: move tests/test_litellm/llms into tests/unit/llms by \u003ca href=\"https://github.com/yuneng-berri\"\u003e\u003ccode\u003e@​yuneng-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43191\"\u003eBerriAI/litellm#43191\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: move tests/test_litellm integrations and secret_managers into tests/unit by \u003ca href=\"https://github.com/yuneng-berri\"\u003e\u003ccode\u003e@​yuneng-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43194\"\u003eBerriAI/litellm#43194\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(mcp): configure protocol versions and capability discovery by \u003ca href=\"https://github.com/joshua-berri\"\u003e\u003ccode\u003e@​joshua-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43169\"\u003eBerriAI/litellm#43169\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/BerriAI/litellm/commit/80b9556dd312d18c535ae06884faa97d1fdb8f46\"\u003e\u003ccode\u003e80b9556\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/45927\"\u003e#45927\u003c/a\u003e from BerriAI/litellm_ui_bundle_rc_1_105_0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/919f027a0ba0bb22e3cbeaae9b7c38efd002afdd\"\u003e\u003ccode\u003e919f027\u003c/code\u003e\u003c/a\u003e chore: update Next.js build artifacts (2026-10-11 06:00 UTC, node v24.19.0)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/f15af9b0594db44c5c371a3070cbc361f50af414\"\u003e\u003ccode\u003ef15af9b\u003c/code\u003e\u003c/a\u003e feat(ui): backport decision auto-router setup to 1.105 (\u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/45915\"\u003e#45915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/2616b1a3db7f1d6268f94704d7655fcd0dfee042\"\u003e\u003ccode\u003e2616b1a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/45905\"\u003e#45905\u003c/a\u003e from BerriAI/litellm_backport_decisions_rc_1_105_0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/fcbb02231b284ade286b47348efeb866f097c2df\"\u003e\u003ccode\u003efcbb022\u003c/code\u003e\u003c/a\u003e chore(backport): merge rc/1.105.0 and move supported_decisions_providers to l...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/23fec69be297bd68c43ecbb66f525b8c635d220e\"\u003e\u003ccode\u003e23fec69\u003c/code\u003e\u003c/a\u003e test(unit): flush queued logging tasks after each test so systemone callback ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/212b42e932cd3a025119b552ef33aad56b191ec9\"\u003e\u003ccode\u003e212b42e\u003c/code\u003e\u003c/a\u003e chore(backport): regenerate dashboard API types and adapt the picks to rc/1.1...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/f26cff4ce353e2a874976d85893e30aaac45ded8\"\u003e\u003ccode\u003ef26cff4\u003c/code\u003e\u003c/a\u003e feat(sdk): add litellm.systemone and trim litellm.decisions to the OpenAI sha...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/40323053177a3615d1c13071e4faa42224f48c5a\"\u003e\u003ccode\u003e4032305\u003c/code\u003e\u003c/a\u003e test(decisions): bill the OpenAI-format openrouter case from provider-reporte...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/8f262b2089c5bdd4f4e59af4b921c36af10b9135\"\u003e\u003ccode\u003e8f262b2\u003c/code\u003e\u003c/a\u003e docs(proxy): describe /v1/decisions and /v1/systemone in Swagger UI (\u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/45838\"\u003e#45838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/BerriAI/litellm/compare/v1.103.2...v1.105.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.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n","html_url":"https://github.com/Alberto-Codes/gepa-adk/pull/585","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alberto-Codes%2Fgepa-adk/issues/585","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/585/packages"},{"uuid":"5950141228","node_id":"PR_kwDOQtdXMM8AAAABJp6-dg","number":248,"state":"open","title":"build(deps): update pydantic requirement from \u003e=2.13.5 to \u003e=2.14.1","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":6,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-20T21:43:21.000Z","updated_at":"2026-10-23T16:24:14.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): update","packages":[{"name":"pydantic","old_version":"\u003e=2.13.5","new_version":"\u003e=2.14.1","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pydantic](https://github.com/pydantic/pydantic) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n","html_url":"https://github.com/JasperDale420/Orion/pull/248","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/JasperDale420%2FOrion/issues/248","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/248/packages"}],"issue_packages":[{"old_version":"2.9.2","new_version":"2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-26T17:08:08.000Z","version_change":"2.9.2 → 2.14.1","issue":{"uuid":"6044503745","node_id":"PR_kwDOUIt8Cs8AAAABK06DHA","number":32,"state":"open","title":"Bump the pip-minor-and-patch group across 1 directory with 8 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-26T17:08:08.000Z","updated_at":"2026-10-26T17:08:43.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-minor-and-patch","update_count":8,"packages":[{"name":"fastapi","old_version":"0.115.0","new_version":"0.161.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.30.6","new_version":"0.54.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pydantic","old_version":"2.9.2","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.5.2","new_version":"2.16.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"httpx","old_version":"0.27.2","new_version":"0.28.1","repository_url":"https://github.com/encode/httpx"},{"name":"python-dotenv","old_version":"1.0.1","new_version":"1.2.4","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"respx","old_version":"0.21.1","new_version":"0.23.1","repository_url":"https://github.com/lundberg/respx"},{"name":"ruff","old_version":"0.6.9","new_version":"0.17.2","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-minor-and-patch group with 8 updates in the /apps/document-service directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.115.0` | `0.161.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.30.6` | `0.54.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.9.2` | `2.14.1` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.5.2` | `2.16.1` |\n| [httpx](https://github.com/encode/httpx) | `0.27.2` | `0.28.1` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.0.1` | `1.2.4` |\n| [respx](https://github.com/lundberg/respx) | `0.21.1` | `0.23.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.6.9` | `0.17.2` |\n\n\nUpdates `fastapi` from 0.115.0 to 0.161.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.161.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix OpenAPI schemas for standalone nullable form unions. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16598\"\u003e#16598\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.161.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16596\"\u003e#16596\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.160.0\u003c/h2\u003e\n\u003cp\u003eQuery, header, cookie, and form parameter models now apply their \u003ccode\u003eextra\u003c/code\u003e configuration to all submitted fields in the same parameter location, consistent with Pydantic behavior. This includes fields declared in other models, individual parameters, or dependencies, which were previously excluded.\u003c/p\u003e\n\u003cp\u003eWith \u003ccode\u003eextra=\u0026quot;forbid\u0026quot;\u003c/code\u003e, fields outside the model are rejected even if another parameter declares them. With \u003ccode\u003eextra=\u0026quot;allow\u0026quot;\u003c/code\u003e, those fields are included as model extras. With the default \u003ccode\u003eextra=\u0026quot;ignore\u0026quot;\u003c/code\u003e, they are ignored.\u003c/p\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16594\"\u003e#16594\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump certifi from 2026.1.4 to 2026.10.19. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16571\"\u003e#16571\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.159.1\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16586\"\u003e#16586\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.159.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16584\"\u003e#16584\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.158.2\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16582\"\u003e#16582\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.158.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Preserve form media types in OpenAPI. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16579\"\u003e#16579\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.158.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16577\"\u003e#16577\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.157.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/69ddc2badf9da1123bba4d360225ae6b085985f6\"\u003e\u003ccode\u003e69ddc2b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.161.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16599\"\u003e#16599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0cafa07bd4e4c220169e27425f504af3b737d1f8\"\u003e\u003ccode\u003e0cafa07\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/f90d0369380a539c673b1bbbbd86535b8cdee746\"\u003e\u003ccode\u003ef90d036\u003c/code\u003e\u003c/a\u003e 🐛 Fix OpenAPI schemas for standalone nullable form unions (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16598\"\u003e#16598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/80c8742d141e67beaf747343405c8facf999bc0c\"\u003e\u003ccode\u003e80c8742\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.161.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16597\"\u003e#16597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b105209dbf32d1e25ff7357ab706490dcafc9c44\"\u003e\u003ccode\u003eb105209\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e42ac0a13459086f42d96eab13748303bcfa78e7\"\u003e\u003ccode\u003ee42ac0a\u003c/code\u003e\u003c/a\u003e ✨ Add support for combining unions of form models (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16596\"\u003e#16596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/addd0778e996cf886972b8024113d79f8d0a3580\"\u003e\u003ccode\u003eaddd077\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.160.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16595\"\u003e#16595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/352a4edff3f4362f28c42da29e0879846f6f637e\"\u003e\u003ccode\u003e352a4ed\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/91a335ce946c7a832da973f2acf69b8876594216\"\u003e\u003ccode\u003e91a335c\u003c/code\u003e\u003c/a\u003e 🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16594\"\u003e#16594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ce6ee83e5411b98582e996e47edf7870418a68f4\"\u003e\u003ccode\u003ece6ee83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.115.0...0.161.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.30.6 to 0.54.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.54.0\u003c/h2\u003e\n\u003ch2\u003e📨 Send metadata after the response body\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.54.0 adds response trailers and \u003ccode\u003e103 Early Hints\u003c/code\u003e to its experimental HTTP/2 implementation through \u003ccode\u003ezttp\u003c/code\u003e.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.54.0 \u0026quot;zttp\u0026gt;=0.0.34\u0026quot;\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend HTTP/2 response trailers\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e). The ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension lets applications send metadata, such as checksums, after the response body. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them. Multiple trailer messages are combined before completing the response.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental and opt-in.\u003c/strong\u003e Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Upgrade-based h2c and WebSockets over HTTP/2 remain unsupported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e💡 Hint at resources before the final response\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend \u003ccode\u003e103 Early Hints\u003c/code\u003e over HTTP/2\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e). Applications can use the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension to send resource hints before the final response. Each supplied link becomes a separate \u003ccode\u003eLink\u003c/code\u003e header.\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.53.0...0.54.0\"\u003e0.53.0...0.54.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.53.0\u003c/h2\u003e\n\u003ch2\u003e🌐 Opt-in HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.53.0 adds experimental HTTP/2 through \u003ccode\u003ezttp\u003c/code\u003e, alongside a new \u003ccode\u003ezuvloop\u003c/code\u003e integration and connection-handling improvements.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.53.0\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eServe HTTP/1.1 and HTTP/2 with \u003ccode\u003ezttp\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e). Install \u003ccode\u003ezttp\u003c/code\u003e, then enable HTTP/2 with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Uvicorn negotiates HTTP/2 over TLS with ALPN and supports cleartext prior knowledge.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental.\u003c/strong\u003e Upgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚙️ More event loop choice\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eRun Uvicorn with \u003ccode\u003ezuvloop\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e). Install \u003ccode\u003ezuvloop\u003c/code\u003e separately and select it explicitly with \u003ccode\u003e--loop zuvloop\u003c/code\u003e on CPython 3.14 or newer.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🛡️ More reliable connections and proxies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHonor \u003ccode\u003eConnection: close\u003c/code\u003e token lists\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e). Uvicorn now parses comma-separated tokens case-insensitively across HTTP implementations.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTrust IPv6 loopback proxies by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e). The default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value now includes \u003ccode\u003e::1\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKeep upgraded WebSockets alive\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e). Uvicorn cancels the HTTP keep-alive timer when the connection becomes a WebSocket.\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.52.4...0.53.0\"\u003e0.52.4...0.53.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\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.52.3...0.52.4\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/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.54.0 (September 24, 2026)\u003c/h2\u003e\n\u003cp\u003eHTTP/2 support remains experimental. Install \u003ccode\u003ezttp\u0026gt;=0.0.34\u003c/code\u003e and enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd HTTP/2 response trailers through the ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd HTTP/2 \u003ccode\u003e103 Early Hints\u003c/code\u003e through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.53.0 (September 14, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release adds experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e. Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\nUpgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003ezuvloop\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle comma-separated, case-insensitive \u003ccode\u003eConnection: close\u003c/code\u003e tokens across HTTP implementations (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTrust IPv6 loopback in the default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancel the HTTP keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.4 (August 18, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.3 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.2 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.1 (August 1, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComplete the closing handshake on server-initiated WebSocket closes in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e and \u003ccode\u003ewsproto\u003c/code\u003e implementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3053\"\u003e#3053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing write flow control to the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, preventing data truncation on server-initiated closes with large in-flight payloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3048\"\u003e#3048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle connection loss while a WebSocket write is waiting on backpressure (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3050\"\u003e#3050\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3eb9a9ab9af69005c687728097461c1fd2a95db9\"\u003e\u003ccode\u003e3eb9a9a\u003c/code\u003e\u003c/a\u003e Version 0.54.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3161\"\u003e#3161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/cd7ef6d31c1a09a3653f326cda7813d35ffd6082\"\u003e\u003ccode\u003ecd7ef6d\u003c/code\u003e\u003c/a\u003e Remove races from supervisor tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3134\"\u003e#3134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a56c7cce64aaa37e5864f882a5cbce8aa1dac47a\"\u003e\u003ccode\u003ea56c7cc\u003c/code\u003e\u003c/a\u003e Support HTTP/2 response trailers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3146\"\u003e#3146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9bd4404cca9506e9ba4f46b69ef72d011ceef2bd\"\u003e\u003ccode\u003e9bd4404\u003c/code\u003e\u003c/a\u003e chore(deps): bump anyio from 4.13.0 to 4.14.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3145\"\u003e#3145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/21f39ef7988366f77fb3172569bd235ac5de34cc\"\u003e\u003ccode\u003e21f39ef\u003c/code\u003e\u003c/a\u003e Add HTTP/2 Early Hints support (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/421708fbc1a704dac8bd4053a7c4c0bf4d3704ee\"\u003e\u003ccode\u003e421708f\u003c/code\u003e\u003c/a\u003e Version 0.53.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3136\"\u003e#3136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/f1a1bff7be819f5724d6fdf86dfd448a97c62e23\"\u003e\u003ccode\u003ef1a1bff\u003c/code\u003e\u003c/a\u003e Unset the keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/63971ed952090438896e6eba7d07178b616d97cc\"\u003e\u003ccode\u003e63971ed\u003c/code\u003e\u003c/a\u003e Document HTTP/2 support (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3130\"\u003e#3130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7d1a0055aee5e281accc646b559ddd147486bf8a\"\u003e\u003ccode\u003e7d1a005\u003c/code\u003e\u003c/a\u003e Remove race from multiprocess health check test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3128\"\u003e#3128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/5ac6265a01ff6dcadb0e4250152c3deaf8a168a9\"\u003e\u003ccode\u003e5ac6265\u003c/code\u003e\u003c/a\u003e Add ::1 to FORWARDED_ALLOW_IPS (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.30.6...0.54.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.9.2 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.9.2...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-settings` from 2.5.2 to 2.16.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.16.1\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThis patch release fixes two CLI regressions introduced in 2.16.0.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed-length tuple positionals such as \u003ccode\u003eCliPositionalArg[tuple[int, int]]\u003c/code\u003e and \u003ccode\u003eNamedTuple\u003c/code\u003es are single-valued again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1069\"\u003e#1069\u003c/a\u003e). Since 2.16.0 they were treated as variadic, so a CLI either refused to start with a \u003ccode\u003eSettingsError\u003c/code\u003e or put the wrong argument into the tuple. Variable-length tuples (\u003ccode\u003etuple[int, ...]\u003c/code\u003e and bare \u003ccode\u003eTuple\u003c/code\u003e) are still variadic.\u003c/li\u003e\n\u003cli\u003eA field typed as an alias of a list of dicts, e.g. \u003ccode\u003etype ListOfDict = list[dict[str, int]]\u003c/code\u003e, accepts a JSON list again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1049\"\u003e#1049\u003c/a\u003e). Since 2.16.0, \u003ccode\u003e--xx '[{\u0026quot;a\u0026quot;:1},{\u0026quot;b\u0026quot;:2}]'\u003c/code\u003e was merged into the single dict \u003ccode\u003e{\u0026quot;a\u0026quot;: 1, \u0026quot;b\u0026quot;: 2}\u003c/code\u003e and failed validation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden CI by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1044\"\u003epydantic/pydantic-settings#1044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep list of dicts CLI values as lists 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/1049\"\u003epydantic/pydantic-settings#1049\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep fixed-length tuple CLI positionals single-valued 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/1069\"\u003epydantic/pydantic-settings#1069\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.16.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/1087\"\u003epydantic/pydantic-settings#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1056\"\u003epydantic/pydantic-settings#1056\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.16.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBreaking changes and behavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.10 is no longer supported\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1003\"\u003e#1003\u003c/a\u003e). pydantic-settings now requires Python 3.11+, since 3.10 reaches end of life this month. The \u003ccode\u003etomli\u003c/code\u003e fallback is gone in favor of stdlib \u003ccode\u003etomllib\u003c/code\u003e; the \u003ccode\u003etoml\u003c/code\u003e extra is kept as an empty extra so \u003ccode\u003epip install pydantic-settings[toml]\u003c/code\u003e keeps working.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003epython-dotenv\u0026gt;=1.2.2\u003c/code\u003e is now required\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/971\"\u003e#971\u003c/a\u003e) to pick up the fix for CVE-2026-28684.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAliases are ignored in every source when \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1033\"\u003e#1033\u003c/a\u003e). Env vars, secrets, CLI flags and defaults now use only field names, matching pydantic. An env var named after the alias is now ignored instead of raising \u003ccode\u003eextra_forbidden\u003c/code\u003e, and the CLI exposes \u003ccode\u003e--apple\u003c/code\u003e rather than \u003ccode\u003e--pomo\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003evalidation_alias\u003c/code\u003e takes precedence over \u003ccode\u003ealias\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1038\"\u003e#1038\u003c/a\u003e). When the two differ, values from JSON/YAML/TOML files and the CLI were silently ignored; they now load. CLI help lists the \u003ccode\u003evalidation_alias\u003c/code\u003e flag first, and \u003ccode\u003eCliApp.serialize\u003c/code\u003e emits it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCLI case-insensitivity only lowercases registered options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1036\"\u003e#1036\u003c/a\u003e). With \u003ccode\u003ecase_sensitive=False\u003c/code\u003e, args after \u003ccode\u003e--\u003c/code\u003e and those captured by \u003ccode\u003eCliUnknownArgs\u003c/code\u003e keep their case (\u003ccode\u003e-Xmx4G\u003c/code\u003e no longer becomes \u003ccode\u003e-xmx4g\u003c/code\u003e). Unrecognized options are now reported as typed (\u003ccode\u003e--NOPE\u003c/code\u003e instead of \u003ccode\u003e--nope\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eJSON and YAML config files are read as UTF-8 by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/955\"\u003e#955\u003c/a\u003e) instead of the locale encoding, completing the secrets-file fix from 2.15.0. \u003ccode\u003ejson_file_encoding\u003c/code\u003e/\u003ccode\u003eyaml_file_encoding\u003c/code\u003e still override it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDiscriminated union defaults are partially updated again\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/997\"\u003e#997\u003c/a\u003e). This reverts the 2.15.0 regression with \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e: the default is only dropped when the incoming value selects a \u003cem\u003edifferent\u003c/em\u003e union member.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.15 and pydantic 2.14 support\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1026\"\u003e#1026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1029\"\u003e#1029\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1022\"\u003e#1022\u003c/a\u003e). pydantic 2.14 broke \u003ccode\u003eCliApp.run\u003c/code\u003e and \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e handling; both are fixed.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCached settings instances\u003c/strong\u003e via \u003ccode\u003eSettings.settings_cached()\u003c/code\u003e and \u003ccode\u003eSettings.settings_clear_cache()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/952\"\u003e#952\u003c/a\u003e). These give you a process-local singleton per settings class without hand-rolling \u003ccode\u003elru_cache\u003c/code\u003e wrappers. Calling the class directly still builds a fresh instance.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAWS Systems Manager Parameter Store source\u003c/strong\u003e — \u003ccode\u003eAWSSystemsManagerSettingsSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/941\"\u003e#941\u003c/a\u003e). It recursively reads every parameter under an \u003ccode\u003essm_path\u003c/code\u003e, with \u003ccode\u003e/\u003c/code\u003e mapping onto nested models. Install it with the new \u003ccode\u003eaws-systems-manager\u003c/code\u003e extra.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenv_file_depth\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/940\"\u003e#940\u003c/a\u003e) lets a relative \u003ccode\u003eenv_file\u003c/code\u003e be found in parent directories, mirroring \u003ccode\u003epyproject_toml_depth\u003c/code\u003e. This is useful when scripts run from a subdirectory of a monorepo. It defaults to \u003ccode\u003e0\u003c/code\u003e, which keeps the current behavior.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eCliVariadicArg\u003c/code\u003e for named variadic options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/949\"\u003e#949\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/958\"\u003e#958\u003c/a\u003e). It accepts \u003ccode\u003e--param a b c\u003c/code\u003e in addition to repeated \u003ccode\u003e--param a --param b\u003c/code\u003e. Required fields need at least one value.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4e286e284fe43f0fb86872b91f708d3dd5356bfc\"\u003e\u003ccode\u003e4e286e2\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1087\"\u003e#1087\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/993b59e1682799d5ad33b721b7158718b6278944\"\u003e\u003ccode\u003e993b59e\u003c/code\u003e\u003c/a\u003e Keep fixed-length tuple CLI positionals single-valued (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1069\"\u003e#1069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f651a7a57a0e3b26147da02f2fda2d05f8c34cce\"\u003e\u003ccode\u003ef651a7a\u003c/code\u003e\u003c/a\u003e Keep list of dicts CLI values as lists (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1049\"\u003e#1049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ecf7d90bf1b1b71f2875f607c1668c44f576bf9c\"\u003e\u003ccode\u003eecf7d90\u003c/code\u003e\u003c/a\u003e Harden CI (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1044\"\u003e#1044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8c259f41b49b4cefbe4fb676d3c1f52dddd3cca8\"\u003e\u003ccode\u003e8c259f4\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1043\"\u003e#1043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4bc667ada383aca4df00304cd171f327a9fae163\"\u003e\u003ccode\u003e4bc667a\u003c/code\u003e\u003c/a\u003e Keep case of non-option CLI args when case_sensitive=False (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f75a8057a5fafe4aef3a042c2adf367c6987f73f\"\u003e\u003ccode\u003ef75a805\u003c/code\u003e\u003c/a\u003e Simplify alias resolution branch and test alias with AliasChoices/AliasPath (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/cfdc5585e821e84905905027de68a0188213537a\"\u003e\u003ccode\u003ecfdc558\u003c/code\u003e\u003c/a\u003e Honor env_parse_none_str for GCP Secret Manager (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1040\"\u003e#1040\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/081d39f9c73f46e68bc2bef75a23f7d84ed0c377\"\u003e\u003ccode\u003e081d39f\u003c/code\u003e\u003c/a\u003e Fix config file and CLI values being ignored when alias differs from validati...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c46ebc4cc599c09f3692f4d2e82a8f0bb5433f3a\"\u003e\u003ccode\u003ec46ebc4\u003c/code\u003e\u003c/a\u003e Expand home paths when checking TOML table headers (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.5.2...v2.16.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httpx` from 0.27.2 to 0.28.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/httpx/releases\"\u003ehttpx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.28.1\u003c/h2\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 0.28.0\u003c/h2\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/HEAD/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/httpx/blob/master/CHANGELOG.md\"\u003ehttpx's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eBe aware that the default \u003cem\u003eJSON request bodies now use a more compact representation\u003c/em\u003e. This is generally considered a prefered style, tho may require updates to test suites.\u003c/p\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations...\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/master/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/26d48e0634e6ee9cdc0533996db289ce4b430177\"\u003e\u003ccode\u003e26d48e0\u003c/code\u003e\u003c/a\u003e Version 0.28.1 (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3445\"\u003e#3445\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/89599a9541af14bcf906fc4ed58ccbdf403802ba\"\u003e\u003ccode\u003e89599a9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003everify=False\u003c/code\u003e, \u003ccode\u003ecert=...\u003c/code\u003e case. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3442\"\u003e#3442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/8ecb86f0d74ffc52d4663214fae9526bee89358d\"\u003e\u003ccode\u003e8ecb86f\u003c/code\u003e\u003c/a\u003e Add test for request params behavior changes (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3440\"\u003e#3440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/0cb7e5a2e736628e2f506d259fcf0d48cd2bde82\"\u003e\u003ccode\u003e0cb7e5a\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 11 updates (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3434\"\u003e#3434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/15e21e9ea3cad4f06e22a7e704aabefdf43d2e29\"\u003e\u003ccode\u003e15e21e9\u003c/code\u003e\u003c/a\u003e Updating deprecated docstring Client() class (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3426\"\u003e#3426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/80960fa31918d7663c3f4c3ad61661cf0e80628f\"\u003e\u003ccode\u003e80960fa\u003c/code\u003e\u003c/a\u003e Version 0.28.0. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3419\"\u003e#3419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/a33c87852b8a0dddc65e5f739af1e0a6fca4b91f\"\u003e\u003ccode\u003ea33c878\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eextensions\u003c/code\u003e type annotation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3380\"\u003e#3380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/ce7e14da27abba6574be9b3ea7cd5990556a9343\"\u003e\u003ccode\u003ece7e14d\u003c/code\u003e\u003c/a\u003e Error on verify as str. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3418\"\u003e#3418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/47f4a96ffaaaa07dca1614409549b5d7a6e7af49\"\u003e\u003ccode\u003e47f4a96\u003c/code\u003e\u003c/a\u003e Handle empty zstd responses (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3412\"\u003e#3412\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/189fc4bcbe5f314128775dec66a616ac9a31ad48\"\u003e\u003ccode\u003e189fc4b\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md, fix typo(s) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3406\"\u003e#3406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/httpx/compare/0.27.2...0.28.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.0.1 to 1.2.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003edotenv get\u003c/code\u003e no longer exits with code 1 for empty string values (\u003ccode\u003eKEY=\u003c/code\u003e) by [\u003ca href=\"https://github.com/ShamikOfficial\"\u003e\u003ccode\u003e@​ShamikOfficial\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAn unquoted empty value followed by an inline comment (e.g. \u003ccode\u003eKEY= # comment\u003c/code\u003e) is now parsed as an empty string instead of the comment text by [\u003ca href=\"https://github.com/Noethix55555\"\u003e\u003ccode\u003e@​Noethix55555\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run --no-override\u003c/code\u003e now expands variable references with the same precedence as \u003ccode\u003eload_dotenv(override=False)\u003c/code\u003e, so a value like \u003ccode\u003e${BASE}/suffix\u003c/code\u003e uses the existing \u003ccode\u003eBASE\u003c/code\u003e from the environment instead of the one from the \u003ccode\u003e.env\u003c/code\u003e file by [\u003ca href=\"https://github.com/ROTl24\"\u003e\u003ccode\u003e@​ROTl24\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.2.3\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- 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/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.4] - 2026-10-01\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003edotenv get\u003c/code\u003e no longer exits with code 1 for empty string values (\u003ccode\u003eKEY=\u003c/code\u003e) by [\u003ca href=\"https://github.com/ShamikOfficial\"\u003e\u003ccode\u003e@​ShamikOfficial\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAn unquoted empty value followed by an inline comment (e.g. \u003ccode\u003eKEY= # comment\u003c/code\u003e) is now parsed as an empty string instead of the comment text by [\u003ca href=\"https://github.com/Noethix55555\"\u003e\u003ccode\u003e@​Noethix55555\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run --no-override\u003c/code\u003e now expands variable references with the same precedence as \u003ccode\u003eload_dotenv(override=False)\u003c/code\u003e, so a value like \u003ccode\u003e${BASE}/suffix\u003c/code\u003e uses the existing \u003ccode\u003eBASE\u003c/code\u003e from the environment instead of the one from the \u003ccode\u003e.env\u003c/code\u003e file by [\u003ca href=\"https://github.com/ROTl24\"\u003e\u003ccode\u003e@​ROTl24\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.3] - 2026-08-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/a565c2cc41599c48eabc6b7b7f5b826d43c5a6d7\"\u003e\u003ccode\u003ea565c2c\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.3 → 1.2.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a7abd00261e51baba958e15f443c66165042ea2\"\u003e\u003ccode\u003e4a7abd0\u003c/code\u003e\u003c/a\u003e docs: add 1.2.4 release notes (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f215c0274dc4c310e5ca5feb4c6bddade25ece21\"\u003e\u003ccode\u003ef215c02\u003c/code\u003e\u003c/a\u003e fix: dotenv get exits 0 for empty string values (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/58f2d7c112235b347040bb5cb579d4ebc0a0ad91\"\u003e\u003ccode\u003e58f2d7c\u003c/code\u003e\u003c/a\u003e test: make test_run_with_command_flags portable and meaningful (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/709\"\u003e#709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e0310e5bb3f2b701b11bbc007ca0c82c1bd56f38\"\u003e\u003ccode\u003ee0310e5\u003c/code\u003e\u003c/a\u003e fix: honor --no-override when expanding variables in dotenv run (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/a00cb2eed0704cd6d2071b2004c37e95ccc86ee5\"\u003e\u003ccode\u003ea00cb2e\u003c/code\u003e\u003c/a\u003e docs: add CHANGELOG entry for \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e (fix \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/600\"\u003e#600\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f5485a61eefa5e686d6d5bdc7aa9ad6b104b1e92\"\u003e\u003ccode\u003ef5485a6\u003c/code\u003e\u003c/a\u003e fix: parse empty unquoted value with inline comment as empty string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/49515afee2d50c33cad9419b3800b3a0dc93fc59\"\u003e\u003ccode\u003e49515af\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.2 → 1.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/8ac846ff2760b65470e769d7eed33e540f0934e1\"\u003e\u003ccode\u003e8ac846f\u003c/code\u003e\u003c/a\u003e chore: add release runbook (RELEASING.md) and make release target\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/bb31c944fb4b40e8dea59587f525840c38326166\"\u003e\u003ccode\u003ebb31c94\u003c/code\u003e\u003c/a\u003e docs: add 1.2.3 release notes (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.0.1...v1.2.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `respx` from 0.21.1 to 0.23.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/lundberg/respx/releases\"\u003erespx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.23.1\u003c/h2\u003e\n\u003ch2\u003e0.23.1 (8th April 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression causing \u003ccode\u003eparams\u003c/code\u003e pattern to stop working under some conditions,\nby doing a strict detection of \u003ccode\u003eANY\u003c/code\u003e in multi items patterns (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/313\"\u003e#313\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate workflows actions (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/310\"\u003e#310\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 0.23.0\u003c/h2\u003e\n\u003ch2\u003e0.23.0 (7th April 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003edata\u003c/code\u003e pattern with list value (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/264\"\u003e#264\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix and enhance incorrect documentations about iterable side effects (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/287\"\u003e#287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix documentation typo, thanks \u003ca href=\"https://github.com/markhobson\"\u003e\u003ccode\u003e@​markhobson\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix support for multiple slashes \u003ccode\u003e//\u003c/code\u003e in URL path by not using \u003ccode\u003eurljoin\u003c/code\u003e when\nprepending path, thanks \u003ca href=\"https://github.com/lewiscollard\"\u003e\u003ccode\u003e@​lewiscollard\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Skeen\"\u003e\u003ccode\u003e@​Skeen\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/302\"\u003e#302\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eType Route.respond json as \u003ccode\u003eAny\u003c/code\u003e to align with HTTPX, thanks \u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/284\"\u003e#284\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProperly handle \u003ccode\u003eANY\u003c/code\u003e in \u003ccode\u003eMuitiItems\u003c/code\u003e patterns (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/289\"\u003e#289\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix test warnings (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/267\"\u003e#267\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Python 3.14 to test matrix, thanks \u003ca href=\"https://github.com/carlosdorneles-mb\"\u003e\u003ccode\u003e@​carlosdorneles-mb\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/300\"\u003e#300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate nix flake, mypy target and workflows (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/306\"\u003e#306\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/lundberg/respx/issues/282\"\u003e#282\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 0.22.0\u003c/h2\u003e\n\u003ch2\u003e0.22.0 (19th December 2024)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport HTTPX 0.28.0, thanks \u003ca href=\"https://github.com/ndhansen\"\u003e\u003ccode\u003e@​ndhansen\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/278\"\u003e#278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.7, to align with HTTPX 0.25.0 (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/280\"\u003e#280\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CI test to not fail fast and cancel workflows, thanks \u003ca href=\"https://github.com/flaeppe\"\u003e\u003ccode\u003e@​flaeppe\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/269\"\u003e#269\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd dependabot to check GitHub actions packages, thanks \u003ca href=\"https://github.com/flaeppe\"\u003e\u003ccode\u003e@​flaeppe\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/lundberg/respx/issues/268\"\u003e#268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Python 3.13 to test suite, thanks \u003ca href=\"https://github.com/jairhenrique\"\u003e\u003ccode\u003e@​jairhenrique\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.githu...\n\n_Description has been truncated_","html_url":"https://github.com/EcoTraces/njala-past-papers-platform/pull/32","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/EcoTraces%2Fnjala-past-papers-platform/issues/32","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/32/packages"}},{"old_version":"2.13.3","new_version":"2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-26T16:27:01.000Z","version_change":"2.13.3 → 2.14.1","issue":{"uuid":"6043814415","node_id":"PR_kwDOUqNq-88AAAABK0WLKg","number":22,"state":"open","title":"chore(deps): bump the python-minor-and-patch group across 1 directory with 23 updates","user":"dependabot[bot]","labels":["dependencies","chore","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-26T16:27:01.000Z","updated_at":"2026-10-26T16:27:55.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-minor-and-patch","update_count":23,"packages":[{"name":"aiohttp","old_version":"3.14.3","new_version":"3.14.5","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"azure-identity","old_version":"1.25.0","new_version":"1.26.0","repository_url":"https://github.com/Azure/azure-sdk-for-python"},{"name":"boto3","old_version":"1.43.78","new_version":"1.43.118","repository_url":"https://github.com/boto/boto3"},{"name":"certifi","old_version":"2026.7.22","new_version":"2026.10.23","repository_url":"https://github.com/certifi/python-certifi"},{"name":"gitpython","old_version":"3.1.62","new_version":"3.2.1","repository_url":"https://github.com/gitpython-developers/GitPython"},{"name":"starlette","old_version":"1.6.0","new_version":"1.9.0","repository_url":"https://github.com/Kludex/starlette"},{"name":"pyjwt","old_version":"2.13.0","new_version":"2.15.1","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-gitlab","old_version":"8.3.0","new_version":"8.6.0","repository_url":"https://github.com/python-gitlab/python-gitlab"},{"name":"starlette-context","old_version":"0.3.6","new_version":"0.5.1","repository_url":"https://github.com/tomwojcik/starlette-context"},{"name":"uvicorn","old_version":"0.52.4","new_version":"0.54.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"a2a-sdk","old_version":"1.0.3","new_version":"1.2.3"},{"name":"pydantic","old_version":"2.13.3","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.14.2","new_version":"2.16.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"prometheus-client","old_version":"0.21.1","new_version":"0.26.0","repository_url":"https://github.com/prometheus/client_python"},{"name":"langchain","old_version":"1.3.11","new_version":"1.4.7","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-core","old_version":"1.4.8","new_version":"1.7.0","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-openai","old_version":"1.3.3","new_version":"1.7.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"pandas","old_version":"3.0.3","new_version":"3.1.0","repository_url":"https://github.com/pandas-dev/pandas"},{"name":"pinecone","old_version":"10.0.0","new_version":"10.1.0","repository_url":"https://github.com/pinecone-io/python-sdk"},{"name":"lancedb","old_version":"0.38.0","new_version":"0.40.0","repository_url":"https://github.com/lancedb/lancedb"},{"name":"qdrant-client","old_version":"1.15.1","new_version":"1.20.0","repository_url":"https://github.com/qdrant/qdrant-client"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.7.0","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"ruff","old_version":"0.16.8","new_version":"0.17.2","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-and-patch group with 23 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.14.3` | `3.14.5` |\n| [azure-identity](https://github.com/Azure/azure-sdk-for-python) | `1.25.0` | `1.26.0` |\n| [boto3](https://github.com/boto/boto3) | `1.43.78` | `1.43.118` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.7.22` | `2026.10.23` |\n| [gitpython](https://github.com/gitpython-developers/GitPython) | `3.1.62` | `3.2.1` |\n| [starlette](https://github.com/Kludex/starlette) | `1.6.0` | `1.9.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.13.0` | `2.15.1` |\n| [python-gitlab](https://github.com/python-gitlab/python-gitlab) | `8.3.0` | `8.6.0` |\n| [starlette-context](https://github.com/tomwojcik/starlette-context) | `0.3.6` | `0.5.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.52.4` | `0.54.0` |\n| [a2a-sdk[http-server]](https://github.com/a2aproject/a2a-python) | `1.0.3` | `1.2.3` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.3` | `2.14.1` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.2` | `2.16.1` |\n| [prometheus-client](https://github.com/prometheus/client_python) | `0.21.1` | `0.26.0` |\n| [langchain](https://github.com/langchain-ai/langchain) | `1.3.11` | `1.4.7` |\n| [langchain-core](https://github.com/langchain-ai/langchain) | `1.4.8` | `1.7.0` |\n| [langchain-openai](https://github.com/langchain-ai/langchain) | `1.3.3` | `1.7.2` |\n| [pandas](https://github.com/pandas-dev/pandas) | `3.0.3` | `3.1.0` |\n| [pinecone](https://github.com/pinecone-io/python-sdk) | `10.0.0` | `10.1.0` |\n| [lancedb](https://github.com/lancedb/lancedb) | `0.38.0` | `0.40.0` |\n| [qdrant-client](https://github.com/qdrant/qdrant-client) | `1.15.1` | `1.20.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.7.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.8` | `0.17.2` |\n\n\nUpdates `aiohttp` from 3.14.3 to 3.14.5\nUpdates `azure-identity` from 1.25.0 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/Azure/azure-sdk-for-python/releases\"\u003eazure-identity's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eazure-identity_1.26.0\u003c/h2\u003e\n\u003ch2\u003e1.26.0 (2026-09-30)\u003c/h2\u003e\n\u003ch3\u003eFeatures Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eManagedIdentityCredential\u003c/code\u003e now supports user-assigned managed identities on Azure Arc-enabled servers. An identity can be selected by client ID, object ID, or resource ID. Token responses that do not confirm the requested identity are rejected. (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/pull/48967\"\u003e#48967\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBugs Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed synchronous Service Fabric managed identity authentication with MSAL 1.39.0 and later. Service Fabric now uses the session from an Azure Core \u003ccode\u003eRequestsTransport\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/pull/48967\"\u003e#48967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed an issue where \u003ccode\u003eAuthorizationCodeCredential\u003c/code\u003e and the asynchronous \u003ccode\u003eOnBehalfOfCredential\u003c/code\u003e could return a cached token for another account when multiple credentials shared a token cache. (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/pull/49001\"\u003e#49001\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eRequestIdPolicy\u003c/code\u003e to the default pipeline policies to ensure a unique \u003ccode\u003ex-ms-client-request-id\u003c/code\u003e header is sent with each request. (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/pull/46070\"\u003e#46070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCertificateCredential\u003c/code\u003e now passes the PEM private key to MSAL as a \u003ccode\u003estr\u003c/code\u003e rather than \u003ccode\u003ebytes\u003c/code\u003e, matching MSAL's documented \u003ccode\u003eclient_credential\u003c/code\u003e contract. (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/pull/46801\"\u003e#46801\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum dependency on \u003ccode\u003emsal\u003c/code\u003e to \u003ccode\u003e\u0026gt;=1.39.0\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/Azure/azure-sdk-for-python/commit/30d8bb95bf21f28fc5ed7a0fc9da43a46765c81e\"\u003e\u003ccode\u003e30d8bb9\u003c/code\u003e\u003c/a\u003e [identity] prepare azure-identity 1.26.0 release (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49290\"\u003e#49290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/c7148b7494ddfe0f726e35168fac7e513d458a90\"\u003e\u003ccode\u003ec7148b7\u003c/code\u003e\u003c/a\u003e [identity] Enable user-assigned managed identity for AzureArcCredential (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48967\"\u003e#48967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/c5b1f4f9138942a3746091c4dac7eda67a08edf2\"\u003e\u003ccode\u003ec5b1f4f\u003c/code\u003e\u003c/a\u003e [Identity] Fix identity cache issue (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49001\"\u003e#49001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/9d085c1814586b0d4e91da6b463d288901c44c8d\"\u003e\u003ccode\u003e9d085c1\u003c/code\u003e\u003c/a\u003e [AutoPR azure-mgmt-compute-bulkaction]-generated-from-SDK Generation - Python...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/efc412d8c56bbc428a12c057042a7c20818d1322\"\u003e\u003ccode\u003eefc412d\u003c/code\u003e\u003c/a\u003e [TA] fix release error (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49261\"\u003e#49261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/3d9b8b3d98abc1191457f994f759f6b407dd9238\"\u003e\u003ccode\u003e3d9b8b3\u003c/code\u003e\u003c/a\u003e Prepare Responses 2.3.0b2 release (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49281\"\u003e#49281\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/8e49d150aaf513e014f6bef49e72c3e257b6c304\"\u003e\u003ccode\u003e8e49d15\u003c/code\u003e\u003c/a\u003e [AutoPR azure-mgmt-resiliencemanagement]-generated-from-SDK Generation - Pyth...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/ef68c78fa2bc6013e97bbb2335935f0f7e75ade0\"\u003e\u003ccode\u003eef68c78\u003c/code\u003e\u003c/a\u003e Preserve canonical agent reference in response snapshots (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49256\"\u003e#49256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/3754db9e571e7f68407030d945b2aef1fd28cfa8\"\u003e\u003ccode\u003e3754db9\u003c/code\u003e\u003c/a\u003e Configurations:  'specification/applink/AppLink.Management/tspconfig.yaml', a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/0929352f45d0c3cea2fcadd4eacefffbf937abef\"\u003e\u003ccode\u003e0929352\u003c/code\u003e\u003c/a\u003e [Mgmt] Make review drafts and incomplete outcomes reliable (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49275\"\u003e#49275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Azure/azure-sdk-for-python/compare/azure-identity_1.25.0...azure-identity_1.26.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.43.78 to 1.43.118\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/185b1bd1bb677650bd986d581d19c0ed3596e583\"\u003e\u003ccode\u003e185b1bd\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.118'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/732c473d141c94365d0ba679f1b376b17ca7f429\"\u003e\u003ccode\u003e732c473\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.118\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b087cd3965d0c876c498ebd755d7663562dc39c8\"\u003e\u003ccode\u003eb087cd3\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/69e35c33ecdb461f226c479190ee8909b10a279c\"\u003e\u003ccode\u003e69e35c3\u003c/code\u003e\u003c/a\u003e Backfill 1.43.117 changelog entry for CA bundle fix (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4861\"\u003e#4861\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/36676797cc898470e079f032e7b43085135792e0\"\u003e\u003ccode\u003e3667679\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.117'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/ea1363487385e9c0788b08208a33f0c3e0c25951\"\u003e\u003ccode\u003eea13634\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.117' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/94f6b3ecda6e8ac834415299db7c3547442667d7\"\u003e\u003ccode\u003e94f6b3e\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.117\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1eba892af3005e14aebca3c8974a7aec69b00a5d\"\u003e\u003ccode\u003e1eba892\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/cfa48089b7c2d51815e49c7aeac1398ce955d83f\"\u003e\u003ccode\u003ecfa4808\u003c/code\u003e\u003c/a\u003e Bump \u003ca href=\"https://github.com/astral-sh/ruff-pre-commit\"\u003ehttps://github.com/astral-sh/ruff-pre-commit\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4860\"\u003e#4860\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/dbaa95d6cec6e692615db69ddcebccf814a70e8c\"\u003e\u003ccode\u003edbaa95d\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.116'\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.78...1.43.118\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.7.22 to 2026.10.23\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/b60466c9f2882d9cf088943c650b0faac06c080c\"\u003e\u003ccode\u003eb60466c\u003c/code\u003e\u003c/a\u003e 2026.10.23 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/445\"\u003e#445\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/662df63d7906df66f1f07c0751a3dfe9da14d914\"\u003e\u003ccode\u003e662df63\u003c/code\u003e\u003c/a\u003e Restore unaffected emSign roots (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/439\"\u003e#439\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/440\"\u003e#440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5cb238caeeb6c30ec1a7309ad3e16a5aa7b10ce8\"\u003e\u003ccode\u003e5cb238c\u003c/code\u003e\u003c/a\u003e Remove emsign (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/69494a764d0a08f90838d53d4b0fefd3e84045d6\"\u003e\u003ccode\u003e69494a7\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.1 to 8.0.2 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/436\"\u003e#436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/029c7b0913d79e2efb73a216fc5c5e13ef958536\"\u003e\u003ccode\u003e029c7b0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.1 to 7.0.2 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/435\"\u003e#435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/9d0a8f1f3a0d6b2e38d5773db7afe1a37e4527b6\"\u003e\u003ccode\u003e9d0a8f1\u003c/code\u003e\u003c/a\u003e Add support for Python 3.15 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/432\"\u003e#432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/db472abf0a37067cb4488f036f4c19adf6b6ec3c\"\u003e\u003ccode\u003edb472ab\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.07.22...2026.10.23\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gitpython` from 3.1.62 to 3.2.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gitpython-developers/GitPython/releases\"\u003egitpython's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.2.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eprepare for next release, v3.2 by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2260\"\u003egitpython-developers/GitPython#2260\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eobjects: decode a byte mode before reading its digits by \u003ca href=\"https://github.com/SashaMIT\"\u003e\u003ccode\u003e@​SashaMIT\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2261\"\u003egitpython-developers/GitPython#2261\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump \u003ca href=\"https://github.com/astral-sh/ruff-pre-commit\"\u003ehttps://github.com/astral-sh/ruff-pre-commit\u003c/a\u003e from v0.16.5 to 0.16.9 in the pre-commit 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/gitpython-developers/GitPython/pull/2263\"\u003egitpython-developers/GitPython#2263\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(submodule): validate destinations before mutation by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2264\"\u003egitpython-developers/GitPython#2264\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(util): create lock files in one exclusive step by \u003ca href=\"https://github.com/radhika1314\"\u003e\u003ccode\u003e@​radhika1314\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2267\"\u003egitpython-developers/GitPython#2267\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(commit): accumulate gpgsig continuation lines in linear time by \u003ca href=\"https://github.com/Keerthana-64\"\u003e\u003ccode\u003e@​Keerthana-64\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2268\"\u003egitpython-developers/GitPython#2268\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(index): accept a single PathLike in checkout by \u003ca href=\"https://github.com/kokotatan\"\u003e\u003ccode\u003e@​kokotatan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2269\"\u003egitpython-developers/GitPython#2269\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(util): redact URL credentials without corrupting the host by \u003ca href=\"https://github.com/yunaremaia\"\u003e\u003ccode\u003e@​yunaremaia\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2270\"\u003egitpython-developers/GitPython#2270\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echange line for changelogs by \u003ca href=\"https://github.com/CrowZhen\"\u003e\u003ccode\u003e@​CrowZhen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2272\"\u003egitpython-developers/GitPython#2272\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(commit): reject identity fields that alter commit headers by \u003ca href=\"https://github.com/Keerthana-64\"\u003e\u003ccode\u003e@​Keerthana-64\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2271\"\u003egitpython-developers/GitPython#2271\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: stop stalled remote commands when their timeout expires by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2277\"\u003egitpython-developers/GitPython#2277\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(util): reject symbolic links that alias \u003ccode\u003e.gitmodules\u003c/code\u003e by \u003ca href=\"https://github.com/Keerthana-64\"\u003e\u003ccode\u003e@​Keerthana-64\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2278\"\u003egitpython-developers/GitPython#2278\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: send one object name or path per git stdin record by \u003ca href=\"https://github.com/Keerthana-64\"\u003e\u003ccode\u003e@​Keerthana-64\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2279\"\u003egitpython-developers/GitPython#2279\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(stats): preserve whitespace in filenames by \u003ca href=\"https://github.com/v1shay\"\u003e\u003ccode\u003e@​v1shay\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2280\"\u003egitpython-developers/GitPython#2280\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(config): preserve exact large integer values by \u003ca href=\"https://github.com/xiehuanyi\"\u003e\u003ccode\u003e@​xiehuanyi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2281\"\u003egitpython-developers/GitPython#2281\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve IterableList names independently of list attributes by \u003ca href=\"https://github.com/FanWu-ai\"\u003e\u003ccode\u003e@​FanWu-ai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2283\"\u003egitpython-developers/GitPython#2283\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix relative blocking lock 20261011 by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2284\"\u003egitpython-developers/GitPython#2284\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/SashaMIT\"\u003e\u003ccode\u003e@​SashaMIT\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2261\"\u003egitpython-developers/GitPython#2261\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kokotatan\"\u003e\u003ccode\u003e@​kokotatan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2269\"\u003egitpython-developers/GitPython#2269\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yunaremaia\"\u003e\u003ccode\u003e@​yunaremaia\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2270\"\u003egitpython-developers/GitPython#2270\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CrowZhen\"\u003e\u003ccode\u003e@​CrowZhen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2272\"\u003egitpython-developers/GitPython#2272\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/v1shay\"\u003e\u003ccode\u003e@​v1shay\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2280\"\u003egitpython-developers/GitPython#2280\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/xiehuanyi\"\u003e\u003ccode\u003e@​xiehuanyi\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2281\"\u003egitpython-developers/GitPython#2281\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/FanWu-ai\"\u003e\u003ccode\u003e@​FanWu-ai\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2283\"\u003egitpython-developers/GitPython#2283\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/gitpython-developers/GitPython/compare/3.2.0...3.2.1\"\u003ehttps://github.com/gitpython-developers/GitPython/compare/3.2.0...3.2.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.2.0 - Security\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003etest: cover subdirectory discovery and pathspec commands in bare-repository worktrees by \u003ca href=\"https://github.com/christianvuerings\"\u003e\u003ccode\u003e@​christianvuerings\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2228\"\u003egitpython-developers/GitPython#2228\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRead git's yes/no and on/off booleans in get_value by \u003ca href=\"https://github.com/rawsun007\"\u003e\u003ccode\u003e@​rawsun007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2229\"\u003egitpython-developers/GitPython#2229\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify detached HEAD access and isolate test branch state by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2231\"\u003egitpython-developers/GitPython#2231\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject submodule move destinations through intermediate symlinks by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2232\"\u003egitpython-developers/GitPython#2232\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: validate checkout positional reference options by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2233\"\u003egitpython-developers/GitPython#2233\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix timeout child-process lookup on non-GNU systems by \u003ca href=\"https://github.com/aprylewu\"\u003e\u003ccode\u003e@​aprylewu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2236\"\u003egitpython-developers/GitPython#2236\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePreserve implicit boolean config keys by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2238\"\u003egitpython-developers/GitPython#2238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject comments after implicit boolean config keys by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2239\"\u003egitpython-developers/GitPython#2239\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix case-insensitive Git config name matching by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2241\"\u003egitpython-developers/GitPython#2241\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMove project metadata to pyproject.toml by \u003ca href=\"https://github.com/mwtoews\"\u003e\u003ccode\u003e@​mwtoews\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2242\"\u003egitpython-developers/GitPython#2242\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMove [doc] extra to a PEP 735 dependency group; add uv-sync CI check by \u003ca href=\"https://github.com/mwtoews\"\u003e\u003ccode\u003e@​mwtoews\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2243\"\u003egitpython-developers/GitPython#2243\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: strip inline config comments the way git does by \u003ca href=\"https://github.com/rawsun007\"\u003e\u003ccode\u003e@​rawsun007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2245\"\u003egitpython-developers/GitPython#2245\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop Python 3.7 by \u003ca href=\"https://github.com/mwtoews\"\u003e\u003ccode\u003e@​mwtoews\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2246\"\u003egitpython-developers/GitPython#2246\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: preserve positional operands in high-level Git commands by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2247\"\u003egitpython-developers/GitPython#2247\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003esubmodule: option to update without fetching by \u003ca href=\"https://github.com/jeffro256\"\u003e\u003ccode\u003e@​jeffro256\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2244\"\u003egitpython-developers/GitPython#2244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebump minor version to indicate drop of python 3.7 support by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2248\"\u003egitpython-developers/GitPython#2248\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: skip a UTF-8 BOM when reading config files by \u003ca href=\"https://github.com/geek-alpha\"\u003e\u003ccode\u003e@​geek-alpha\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2249\"\u003egitpython-developers/GitPython#2249\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/gitpython-developers/GitPython/blob/main/doc/source/changes.rst\"\u003egitpython's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.2.1\u003c/h1\u003e\n\u003cp\u003eSecurity fixes for\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-83vg-56qc-22m7\"\u003ehttps://github.com/gitpython-developers/GitPython/security/advisories/GHSA-83vg-56qc-22m7\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf you can, also try and provide feedback on the upcoming v4 branch\n\u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2274\"\u003egitpython-developers/GitPython#2274\u003c/a\u003e - patches welcome.\u003c/p\u003e\n\u003cp\u003eSee the following for all changes.\n\u003ca href=\"https://github.com/gitpython-developers/GitPython/releases/tag/3.2.1\"\u003ehttps://github.com/gitpython-developers/GitPython/releases/tag/3.2.1\u003c/a\u003e\u003c/p\u003e\n\u003ch1\u003e3.2.0\u003c/h1\u003e\n\u003cp\u003eDrops support for Python 3.7 (5 years after its EOL).\u003c/p\u003e\n\u003cp\u003eSecurity fixes for\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate the pure-Python \u003ccode\u003eGitDB\u003c/code\u003e object database backend due to security and\nperformance issues. Selecting it or a subclass through \u003ccode\u003eodbt\u003c/code\u003e now emits a\n\u003ccode\u003eDeprecationWarning\u003c/code\u003e. Remove \u003ccode\u003eodbt=GitDB\u003c/code\u003e to use \u003ccode\u003eGitCmdObjectDB\u003c/code\u003e, the\nexisting default, or select \u003ccode\u003eodbt=GitCmdObjectDB\u003c/code\u003e explicitly. The \u003ccode\u003egitdb\u003c/code\u003e\npackage remains a dependency for shared types and utilities.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-gq48-pqfc-9p58\"\u003ehttps://github.com/gitpython-developers/GitPython/security/advisories/GHSA-gq48-pqfc-9p58\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-23mf-xhv8-69c2\"\u003ehttps://github.com/gitpython-developers/GitPython/security/advisories/GHSA-23mf-xhv8-69c2\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-f9j4-qggq-h239\"\u003ehttps://github.com/gitpython-developers/GitPython/security/advisories/GHSA-f9j4-qggq-h239\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-w8jc-g24h-crhw\"\u003ehttps://github.com/gitpython-developers/GitPython/security/advisories/GHSA-w8jc-g24h-crhw\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-m64x-33q8-m5h7\"\u003ehttps://github.com/gitpython-developers/GitPython/security/advisories/GHSA-m64x-33q8-m5h7\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-fx3j-rwgx-fr94\"\u003ehttps://github.com/gitpython-developers/GitPython/security/advisories/GHSA-fx3j-rwgx-fr94\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf you can, also try and provide feedback on the upcoming v4 branch\n\u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2274\"\u003egitpython-developers/GitPython#2274\u003c/a\u003e - patches welcome.\u003c/p\u003e\n\u003cp\u003eSee the following for all changes.\n\u003ca href=\"https://github.com/gitpython-developers/GitPython/releases/tag/3.2.0\"\u003ehttps://github.com/gitpython-developers/GitPython/releases/tag/3.2.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/gitpython-developers/GitPython/commit/c179357b38a8962f1c8e33153ac58b5ac0e6e96a\"\u003e\u003ccode\u003ec179357\u003c/code\u003e\u003c/a\u003e prepare changelog prior to release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/97eadb888d2f99567e3113f4e455be4ca128f697\"\u003e\u003ccode\u003e97eadb8\u003c/code\u003e\u003c/a\u003e fix(submodule): validate destinations before mutation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/6a7180a9dfcb276755a8af99dd78155f775a6b14\"\u003e\u003ccode\u003e6a7180a\u003c/code\u003e\u003c/a\u003e prepare for next release, v3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/0b64501a081de8018983c3f464c16b36ddd64353\"\u003e\u003ccode\u003e0b64501\u003c/code\u003e\u003c/a\u003e refactor(db): deprecate the pure-Python \u003ccode\u003eGitDB\u003c/code\u003e backend\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/9349ff58ee00c9fb14d515c8e693f33b2144b238\"\u003e\u003ccode\u003e9349ff5\u003c/code\u003e\u003c/a\u003e fix(repo): preserve literal separate Git directory paths\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/8290c98d35465a38090cdcc1b17be69967092a15\"\u003e\u003ccode\u003e8290c98\u003c/code\u003e\u003c/a\u003e fix: bound actor and date parsing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/9ad28cc4c7176d22cd6181d69805058a719dd03b\"\u003e\u003ccode\u003e9ad28cc\u003c/code\u003e\u003c/a\u003e fix: complete safety checks in Git command wrappers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/ce2093b9569242c35afc7433355df9766c7ac8d3\"\u003e\u003ccode\u003ece2093b\u003c/code\u003e\u003c/a\u003e bump minor version to indicate drop of python 3.7 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/dafafff7e5438879d0167c17008342231f7af314\"\u003e\u003ccode\u003edafafff\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/issues/2247\"\u003e#2247\u003c/a\u003e from gitpython-developers/pos-arg-sanitization\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/790bb3164948625ffb043d2a162425d55923fe9a\"\u003e\u003ccode\u003e790bb31\u003c/code\u003e\u003c/a\u003e fix(remote): reject option-shaped pull operands\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gitpython-developers/GitPython/compare/3.1.62...3.2.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `starlette` from 1.6.0 to 1.9.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/starlette/releases\"\u003estarlette's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.9.0\u003c/h2\u003e\n\u003cp\u003eThis release streams \u003ccode\u003eTestClient\u003c/code\u003e response bodies, so \u003ccode\u003eclient.stream()\u003c/code\u003e returns before the application finishes. It also escapes path delimiters when building URLs, matches host names case-insensitively, and keeps every existing \u003ccode\u003eVary\u003c/code\u003e header.\u003c/p\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStream \u003ccode\u003eTestClient\u003c/code\u003e response bodies, so \u003ccode\u003eclient.stream()\u003c/code\u003e returns before the application finishes. Closing an unfinished streamed response now cancels the application \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3491\"\u003e#3491\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePercent-encode \u003ccode\u003e?\u003c/code\u003e, \u003ccode\u003e#\u003c/code\u003e, \u003ccode\u003e\\\u003c/code\u003e and a leading \u003ccode\u003e//\u003c/code\u003e in the request path when building \u003ccode\u003erequest.url\u003c/code\u003e, and \u003ccode\u003e\\\u003c/code\u003e and a leading \u003ccode\u003e//\u003c/code\u003e in \u003ccode\u003eurl_path_for\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3671\"\u003e#3671\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUse the byte length for \u003ccode\u003eContent-Length\u003c/code\u003e when the response body is a typed or multidimensional \u003ccode\u003ememoryview\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3622\"\u003e#3622\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eInclude \u003ccode\u003eHEAD\u003c/code\u003e in the \u003ccode\u003eAllow\u003c/code\u003e header of \u003ccode\u003eHTTPEndpoint\u003c/code\u003e 405 responses when \u003ccode\u003eGET\u003c/code\u003e is defined \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3585\"\u003e#3585\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eMatch host names case-insensitively in \u003ccode\u003eHost\u003c/code\u003e routing and \u003ccode\u003eTrustedHostMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3542\"\u003e#3542\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePreserve every existing \u003ccode\u003eVary\u003c/code\u003e header in \u003ccode\u003eMutableHeaders.add_vary_header()\u003c/code\u003e, used by \u003ccode\u003eGZipMiddleware\u003c/code\u003e and \u003ccode\u003eSessionMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3675\"\u003e#3675\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull changelog:\u003c/strong\u003e \u003ca href=\"https://github.com/Kludex/starlette/compare/1.8.0...1.9.0\"\u003e1.8.0...1.9.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 1.8.0\u003c/h2\u003e\n\u003cp\u003eThis release adds HTTP 103 Early Hints, preserves response trailers through \u003ccode\u003eGZipMiddleware\u003c/code\u003e, and stops \u003ccode\u003eFileResponse\u003c/code\u003e transfers when clients disconnect. Starlette now requires Python 3.11.\u003c/p\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eRequest.send_early_hints()\u003c/code\u003e for HTTP 103 Early Hints through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3435\"\u003e#3435\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Python 3.11 or later, dropping support for Python 3.10 \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3592\"\u003e#3592\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eExclude native gRPC media types (\u003ccode\u003eapplication/grpc\u003c/code\u003e and \u003ccode\u003eapplication/grpc+...\u003c/code\u003e) from \u003ccode\u003eGZipMiddleware\u003c/code\u003e compression by default \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSend \u003ccode\u003ehttp.response.start\u003c/code\u003e immediately in \u003ccode\u003eGZipMiddleware\u003c/code\u003e for responses with an existing \u003ccode\u003eContent-Encoding\u003c/code\u003e, status \u003ccode\u003e206\u003c/code\u003e, or an excluded content type, instead of waiting for the first body chunk \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3631\"\u003e#3631\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eResolve the multipart charset once per request instead of once per field \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3618\"\u003e#3618\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve response trailers through \u003ccode\u003eGZipMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop \u003ccode\u003eFileResponse\u003c/code\u003e transfers when the client disconnects \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3523\"\u003e#3523\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop multipart range responses when the file ends before a range is complete, instead of looping forever \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3583\"\u003e#3583\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore \u003ccode\u003eRange\u003c/code\u003e when \u003ccode\u003eIf-Range\u003c/code\u003e contains a weak ETag \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3567\"\u003e#3567\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eInclude \u003ccode\u003eAllow: GET, HEAD\u003c/code\u003e in \u003ccode\u003eStaticFiles\u003c/code\u003e \u003ccode\u003e405\u003c/code\u003e responses \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3640\"\u003e#3640\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eClose \u003ccode\u003eRequest.stream()\u003c/code\u003e generators deterministically, avoiding \u0026quot;Exception ignored\u0026quot; errors with stacked \u003ccode\u003eBaseHTTPMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3628\"\u003e#3628\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eVary: Cookie\u003c/code\u003e when \u003ccode\u003eSession.pop()\u003c/code\u003e removes an existing key \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3186\"\u003e#3186\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eEmit \u003ccode\u003eMax-Age=0\u003c/code\u003e on the session cookie when \u003ccode\u003eSessionMiddleware\u003c/code\u003e uses \u003ccode\u003emax_age=0\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3651\"\u003e#3651\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBracket IPv6 hostnames in \u003ccode\u003eURL.replace()\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3617\"\u003e#3617\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull changelog:\u003c/strong\u003e \u003ca href=\"https://github.com/Kludex/starlette/compare/1.7.0...1.8.0\"\u003e1.7.0...1.8.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 1.7.0\u003c/h2\u003e\n\u003cp\u003eThis release adds experimental OpenTelemetry tracing, HTTP \u003ccode\u003eQUERY\u003c/code\u003e support, and response trailers in \u003ccode\u003eTestClient\u003c/code\u003e. Starlette now requires AnyIO 4.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\n\u003ccode\u003eOpenTelemetryMiddleware\u003c/code\u003e is experimental. Its API and emitted telemetry may change in minor releases without a deprecation period.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/starlette/blob/main/docs/release-notes.md\"\u003estarlette's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.9.0 (October 18, 2026)\u003c/h2\u003e\n\u003ch4\u003eChanged\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eStream \u003ccode\u003eTestClient\u003c/code\u003e response bodies, so \u003ccode\u003eclient.stream()\u003c/code\u003e returns before the application finishes. Closing an unfinished streamed response now cancels the application \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3491\"\u003e#3491\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixed\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePercent-encode \u003ccode\u003e?\u003c/code\u003e, \u003ccode\u003e#\u003c/code\u003e, \u003ccode\u003e\\\u003c/code\u003e and a leading \u003ccode\u003e//\u003c/code\u003e in the request path when building \u003ccode\u003erequest.url\u003c/code\u003e, and \u003ccode\u003e\\\u003c/code\u003e and a leading \u003ccode\u003e//\u003c/code\u003e in \u003ccode\u003eurl_path_for\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3671\"\u003e#3671\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUse the byte length for \u003ccode\u003eContent-Length\u003c/code\u003e when the response body is a typed or multidimensional \u003ccode\u003ememoryview\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3622\"\u003e#3622\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eInclude \u003ccode\u003eHEAD\u003c/code\u003e in the \u003ccode\u003eAllow\u003c/code\u003e header of \u003ccode\u003eHTTPEndpoint\u003c/code\u003e 405 responses when \u003ccode\u003eGET\u003c/code\u003e is defined \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3585\"\u003e#3585\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eMatch host names case-insensitively in \u003ccode\u003eHost\u003c/code\u003e routing and \u003ccode\u003eTrustedHostMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3542\"\u003e#3542\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePreserve every existing \u003ccode\u003eVary\u003c/code\u003e header in \u003ccode\u003eMutableHeaders.add_vary_header()\u003c/code\u003e, used by \u003ccode\u003eGZipMiddleware\u003c/code\u003e and \u003ccode\u003eSessionMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3675\"\u003e#3675\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.8.0 (October 13, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release drops Python 3.10 support and adds HTTP 103 Early Hints.\u003c/p\u003e\n\u003ch4\u003eAdded\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eRequest.send_early_hints()\u003c/code\u003e for HTTP 103 Early Hints through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3435\"\u003e#3435\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanged\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Python 3.11 or later, dropping support for Python 3.10 \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3592\"\u003e#3592\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eExclude native gRPC media types (\u003ccode\u003eapplication/grpc\u003c/code\u003e and \u003ccode\u003eapplication/grpc+...\u003c/code\u003e) from \u003ccode\u003eGZipMiddleware\u003c/code\u003e compression by default \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSend \u003ccode\u003ehttp.response.start\u003c/code\u003e immediately in \u003ccode\u003eGZipMiddleware\u003c/code\u003e for responses with an existing \u003ccode\u003eContent-Encoding\u003c/code\u003e, status \u003ccode\u003e206\u003c/code\u003e, or an excluded content type, instead of waiting for the first body chunk \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3631\"\u003e#3631\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eResolve the multipart charset once per request instead of once per field \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3618\"\u003e#3618\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixed\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve response trailers through \u003ccode\u003eGZipMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop \u003ccode\u003eFileResponse\u003c/code\u003e transfers when the client disconnects \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3523\"\u003e#3523\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop multipart range responses when the file ends before a range is complete, instead of looping forever \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3583\"\u003e#3583\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore \u003ccode\u003eRange\u003c/code\u003e when \u003ccode\u003eIf-Range\u003c/code\u003e contains a weak ETag \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3567\"\u003e#3567\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eInclude \u003ccode\u003eAllow: GET, HEAD\u003c/code\u003e in \u003ccode\u003eStaticFiles\u003c/code\u003e \u003ccode\u003e405\u003c/code\u003e responses \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3640\"\u003e#3640\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eClose \u003ccode\u003eRequest.stream()\u003c/code\u003e generators deterministically, avoiding \u0026quot;Exception ignored\u0026quot; errors with stacked \u003ccode\u003eBaseHTTPMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3628\"\u003e#3628\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eVary: Cookie\u003c/code\u003e when \u003ccode\u003eSession.pop()\u003c/code\u003e removes an existing key \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3186\"\u003e#3186\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eEmit \u003ccode\u003eMax-Age=0\u003c/code\u003e on the session cookie when \u003ccode\u003eSessionMiddleware\u003c/code\u003e uses \u003ccode\u003emax_age=0\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3651\"\u003e#3651\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBracket IPv6 hostnames in \u003ccode\u003eURL.replace()\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3617\"\u003e#3617\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.7.0 (September 23, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release adds experimental OpenTelemetry tracing and requires AnyIO 4.\u003c/p\u003e\n\u003cp\u003e!!! warning \u0026quot;OpenTelemetryMiddleware is experimental\u0026quot;\nIts API and emitted telemetry may change in minor releases without a deprecation period\n\u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3574\"\u003e#3574\u003c/a\u003e.\u003c/p\u003e\n\u003ch4\u003eAdded\u003c/h4\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/starlette/commit/1840c9dd3bda5bd0beb5a26b2a7bc797a0f91a2a\"\u003e\u003ccode\u003e1840c9d\u003c/code\u003e\u003c/a\u003e Version 1.9.0 (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3676\"\u003e#3676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/750dc33efe2a3076fc6a69235b02a331c467bc09\"\u003e\u003ccode\u003e750dc33\u003c/code\u003e\u003c/a\u003e Preserve all \u003ccode\u003eVary\u003c/code\u003e headers in \u003ccode\u003eMutableHeaders.add_vary_header\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3675\"\u003e#3675\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/414af4f6b95cbf1cbc43746dc84058a3394e989c\"\u003e\u003ccode\u003e414af4f\u003c/code\u003e\u003c/a\u003e Remove unmaintained packages from the third-party packages page (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3674\"\u003e#3674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/d4df01aab4d1a71c8b8db010843f6453efaaaf7c\"\u003e\u003ccode\u003ed4df01a\u003c/code\u003e\u003c/a\u003e Add adminsite to the third-party packages (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3654\"\u003e#3654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/1766228b4eb5462efd552f3364656e1e0a5b0180\"\u003e\u003ccode\u003e1766228\u003c/code\u003e\u003c/a\u003e Match host names case-insensitively in \u003ccode\u003eHost\u003c/code\u003e routing and `TrustedHostMiddlew...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/a579222b161e5407cd311c32648ed7c845bda4a4\"\u003e\u003ccode\u003ea579222\u003c/code\u003e\u003c/a\u003e Include \u003ccode\u003eHEAD\u003c/code\u003e in the \u003ccode\u003eAllow\u003c/code\u003e header of \u003ccode\u003eHTTPEndpoint\u003c/code\u003e 405 responses (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3585\"\u003e#3585\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/6b11cd7df52dc80a5565ccde79d319729d84e92c\"\u003e\u003ccode\u003e6b11cd7\u003c/code\u003e\u003c/a\u003e Honor streaming responses in TestClient (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3491\"\u003e#3491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/b7901fb908f0c6c3b8b6e495517cea6b2e77e66b\"\u003e\u003ccode\u003eb7901fb\u003c/code\u003e\u003c/a\u003e Use byte length for typed \u003ccode\u003ememoryview\u003c/code\u003e response bodies (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3622\"\u003e#3622\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/3214cd069e1b3c11628d172df387ded973934db2\"\u003e\u003ccode\u003e3214cd0\u003c/code\u003e\u003c/a\u003e Escape path delimiters and leading \u003ccode\u003e//\u003c/code\u003e when building URLs (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3671\"\u003e#3671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/7b2948fe7b7fff28bb018607d54cd4dfa518910e\"\u003e\u003ccode\u003e7b2948f\u003c/code\u003e\u003c/a\u003e Version 1.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/starlette/compare/1.6.0...1.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyjwt` from 2.13.0 to 2.15.1\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.15.1\u003c/h2\u003e\n\u003cp\u003eSee the \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/2.15.1/CHANGELOG.rst\"\u003e2.15.1 changelog\u003c/a\u003e for complete release details.\u003c/p\u003e\n\u003ch2\u003e2.15.0\u003c/h2\u003e\n\u003cp\u003eSee the \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/2.15.0/CHANGELOG.rst\"\u003e2.15.0 changelog\u003c/a\u003e for complete release details.\u003c/p\u003e\n\u003ch2\u003e2.14.0\u003c/h2\u003e\n\u003cp\u003eSee the \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/2.14.0/CHANGELOG.rst\"\u003e2.14.0 changelog\u003c/a\u003e for the complete release details and related security advisories.\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.15.1 \u0026lt;https://github.com/jpadilla/pyjwt/compare/2.15.0...2.15.1\u0026gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Accept trailing Base64URL ``=`` padding when decoding JWS segments, so\n  tokens issued by AWS ALB and similar systems verify instead of raising\n  ``DecodeError: Invalid crypto padding``. Non-alphabet junk such as\n  ``!!!!`` remains rejected (`[#1209](https://github.com/jpadilla/pyjwt/issues/1209) \u0026lt;https://github.com/jpadilla/pyjwt/issues/1209\u0026gt;`__).\n\u003ch2\u003e\u003ccode\u003ev2.15.0 \u0026amp;lt;https://github.com/jpadilla/pyjwt/compare/2.14.0...2.15.0\u0026amp;gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eSecurity\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWrap recursion errors from deeply nested JWT payloads in \u003ccode\u003eDecodeError\u003c/code\u003e\ninstead of exposing a raw \u003ccode\u003eRecursionError\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAdded\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Support Python 3.15 by @kytta in `[#1202](https://github.com/jpadilla/pyjwt/issues/1202) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1202\u0026gt;`__\n\u003cp\u003eChanged\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eJWKSetCache\u003c/code\u003e now stores the parsed \u003ccode\u003ePyJWKSet\u003c/code\u003e rather than the raw JWKS\npayload, so a cache hit no longer re-parses every key. \u003ccode\u003eJWKSetCache.put()\u003c/code\u003e\naccepts either form and raises \u003ccode\u003ePyJWKSetError\u003c/code\u003e for anything else. As a\nresult, \u003ccode\u003ePyJWKClient.get_jwk_set()\u003c/code\u003e returns the same \u003ccode\u003ePyJWKSet\u003c/code\u003e instance\nfor as long as it stays cached, rather than a freshly built one per call in\n\u003ccode\u003e[#1208](https://github.com/jpadilla/pyjwt/issues/1208) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1208\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ePyJWKClient.fetch_data()\u003c/code\u003e now raises\n\u003ccode\u003ePyJWKClientError(\u0026quot;The JWKS endpoint did not return a JSON object\u0026quot;)\u003c/code\u003e when\nthe endpoint response is not a JSON object, instead of returning it for\n\u003ccode\u003eget_jwk_set()\u003c/code\u003e to reject. Callers reaching the JWKS through\n\u003ccode\u003eget_jwk_set()\u003c/code\u003e see the same error as before in\n\u003ccode\u003e[#1208](https://github.com/jpadilla/pyjwt/issues/1208) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1208\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Return cached ``PyJWKSet`` values from ``PyJWKClient.get_jwk_set()`` instead\n  of raising ``PyJWKClientError(\u0026quot;The JWKS endpoint did not return a JSON\n  object\u0026quot;)``. ``JWKSetCache.put()`` documents ``PyJWKSet`` as the cached value,\n  so callers pre-populating the cache to avoid a network round-trip could not\n  read it back in `[#914](https://github.com/jpadilla/pyjwt/issues/914) \u0026lt;https://github.com/jpadilla/pyjwt/issues/914\u0026gt;`__ and\n  `[#1208](https://github.com/jpadilla/pyjwt/issues/1208) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1208\u0026gt;`__\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/7d5ef55e42ce42221f58dc49943e92ccad1fa66a\"\u003e\u003ccode\u003e7d5ef55\u003c/code\u003e\u003c/a\u003e chore: prepare 2.15.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/7bf32526738fe837387bdedd4849a4a525c33a79\"\u003e\u003ccode\u003e7bf3252\u003c/code\u003e\u003c/a\u003e Accept canonical Base64URL padding in JWT segments (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1216\"\u003e#1216\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/1d41a6478e1562e68ff667fcd703356acf085f68\"\u003e\u003ccode\u003e1d41a64\u003c/code\u003e\u003c/a\u003e chore: prepare 2.15.0 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/9bc06658f875b9b40091539140bbbdc4639161c3\"\u003e\u003ccode\u003e9bc0665\u003c/code\u003e\u003c/a\u003e fix: make recursive payload tests deterministic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/5fde08a6cf906aa7698de2d6391d88b73006b17b\"\u003e\u003ccode\u003e5fde08a\u003c/code\u003e\u003c/a\u003e fix: normalize recursive JWT payload errors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/171062d2d734315272a901100aa4b109f2fc3c19\"\u003e\u003ccode\u003e171062d\u003c/code\u003e\u003c/a\u003e utils: mention bytes in force_bytes type error (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1173\"\u003e#1173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/c9d4d5375bf464ef363506fed9eb6e7f33217ab6\"\u003e\u003ccode\u003ec9d4d53\u003c/code\u003e\u003c/a\u003e docs/conf: drop duplicate 'and' from read() docstring (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1174\"\u003e#1174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/2763752196113e1473b0ed7905aa6034aedfbe53\"\u003e\u003ccode\u003e2763752\u003c/code\u003e\u003c/a\u003e Add support for Python 3.15 (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1202\"\u003e#1202\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/4adcd02722f5011c60079d3978dfc167b9a8eaa5\"\u003e\u003ccode\u003e4adcd02\u003c/code\u003e\u003c/a\u003e Catch http.client.HTTPException in PyJWKClient.fetch_data (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1201\"\u003e#1201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/9e501d993b4d3e7dba14bdb1722b1d993ac75097\"\u003e\u003ccode\u003e9e501d9\u003c/code\u003e\u003c/a\u003e fix: correct docstring typo in _validate_jti (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1179\"\u003e#1179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.13.0...2.15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-gitlab` from 8.3.0 to 8.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-gitlab/python-gitlab/releases\"\u003epython-gitlab's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev8.6.0 (2026-09-28)\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eThis release is published under the LGPL-3.0-or-later License.\u003c/em\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eCOPYING\u003c/strong\u003e: Use the combined LGPGL and GPL license text. (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/b6e65dd304fb4f6b7f8f8e98770996734f516ed5\"\u003e\u003ccode\u003eb6e65dd\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003erenovate\u003c/strong\u003e: Add a 7-day cooldown for updates (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/6bb4216c48bdd58f28e875dd2c5da59871b83d34\"\u003e\u003ccode\u003e6bb4216\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ehooks\u003c/strong\u003e: Add all available project hook attributes (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/f57c33b8463d857c1494a0a7ebe4dada4af8a328\"\u003e\u003ccode\u003ef57c33b\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTesting\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDon't delete source branch by default for projects (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/aff7954f6440c9b2c82c9c2321bd5451770edfb6\"\u003e\u003ccode\u003eaff7954\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eDetailed Changes\u003c/strong\u003e: \u003ca href=\"https://github.com/python-gitlab/python-gitlab/compare/v8.5.0...v8.6.0\"\u003ev8.5.0...v8.6.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev8.5.0 (2026-07-28)\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eThis release is published under the LGPL-3.0-or-later License.\u003c/em\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTypo (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/72134f5369cd4568a2374f25543071245375d26e\"\u003e\u003ccode\u003e72134f5\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi\u003c/strong\u003e: Allow ProjectMergeRequestDiscussionNote.resolved to be updated (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/b411e5a20a4370a7c1b6968c85251b57785a9d03\"\u003e\u003ccode\u003eb411e5a\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eclient\u003c/strong\u003e: Retry fetching server version after an unknown result (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/046fbac664e033a0a5a65417bfd229e91a1fd09f\"\u003e\u003ccode\u003e046fbac\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContinuous Integration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRun the pre-commit rst checks in the CI (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/a9c5d17d3ab57d448be6dd5eac3b7ec9eb680261\"\u003e\u003ccode\u003ea9c5d17\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eCorrect error with backticks (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/e57559e8c1bea1ba580074e83d21072d9b80d582\"\u003e\u003ccode\u003ee57559e\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003ediscussions\u003c/strong\u003e: Add example of resolving a single project merge request discussion note (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/2ef6452b9471c1a421ac8addc06eb3b5052289e0\"\u003e\u003ccode\u003e2ef6452\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi\u003c/strong\u003e: Add ListMixin to remaining *DiscussionNoteManagers (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/0e2347cc181214bd3d825eac3cc94239e6cd2ef5\"\u003e\u003ccode\u003e0e2347c\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eclient\u003c/strong\u003e: Additionally handle retries for request timeouts (\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/4e32439deaa9516a48becf9a7fc9cdb7723207c6\"\u003e\u003ccode\u003e4e32439\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-gitlab/python-gitlab/blob/main/CHANGELOG.md\"\u003epython-gitlab's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev8.6.0 (2026-09-28)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eCOPYING\u003c/strong\u003e: Use the combined LGPGL and GPL license text.\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/b6e65dd304fb4f6b7f8f8e98770996734f516ed5\"\u003e\u003ccode\u003eb6e65dd\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003erenovate\u003c/strong\u003e: Add a 7-day cooldown for updates\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/6bb4216c48bdd58f28e875dd2c5da59871b83d34\"\u003e\u003ccode\u003e6bb4216\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ehooks\u003c/strong\u003e: Add all available project hook attributes\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/f57c33b8463d857c1494a0a7ebe4dada4af8a328\"\u003e\u003ccode\u003ef57c33b\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTesting\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDon't delete source branch by default for projects\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/aff7954f6440c9b2c82c9c2321bd5451770edfb6\"\u003e\u003ccode\u003eaff7954\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev8.5.0 (2026-07-28)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTypo\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/72134f5369cd4568a2374f25543071245375d26e\"\u003e\u003ccode\u003e72134f5\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi\u003c/strong\u003e: Allow ProjectMergeRequestDiscussionNote.resolved to be updated\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/b411e5a20a4370a7c1b6968c85251b57785a9d03\"\u003e\u003ccode\u003eb411e5a\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eclient\u003c/strong\u003e: Retry fetching server version after an unknown result\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/046fbac664e033a0a5a65417bfd229e91a1fd09f\"\u003e\u003ccode\u003e046fbac\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContinuous Integration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRun the pre-commit rst checks in the CI\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/a9c5d17d3ab57d448be6dd5eac3b7ec9eb680261\"\u003e\u003ccode\u003ea9c5d17\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eCorrect error with backticks\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/e57559e8c1bea1ba580074e83d21072d9b80d582\"\u003e\u003ccode\u003ee57559e\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003ediscussions\u003c/strong\u003e: Add example of resolving a single project merge request discussion note\n(\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/2ef6452b9471c1a421ac8addc06eb3b5052289e0\"\u003e\u003ccode\u003e2ef6452\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi\u003c/strong\u003e: Add ListMixin to remaining *DiscussionNoteManagers\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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-gitlab/python-gitlab/commit/51eb17e6e67a25157e04b0abc649221bd8ecc7fe\"\u003e\u003ccode\u003e51eb17e\u003c/code\u003e\u003c/a\u003e chore: release v8.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/ce92c8fd96b4babb830853d04e5c86a6edf98202\"\u003e\u003ccode\u003ece92c8f\u003c/code\u003e\u003c/a\u003e chore(deps): update all non-major dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/a3e37132d0abe8410d35c393fa4a49d58799ca2d\"\u003e\u003ccode\u003ea3e3713\u003c/code\u003e\u003c/a\u003e chore(deps): update gitlab/gitlab-ee docker tag to v19.3.2-ee.0 (\u003ca href=\"https://redirect.github.com/python-gitlab/python-gitlab/issues/3448\"\u003e#3448\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/a47b5e0b2b54695c9e3d7d3ed1ab03b300f48d28\"\u003e\u003ccode\u003ea47b5e0\u003c/code\u003e\u003c/a\u003e chore(deps): update all non-major dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/c58ca36b0012957dd7a524afc05f0b04acbfb323\"\u003e\u003ccode\u003ec58ca36\u003c/code\u003e\u003c/a\u003e chore(deps): update pre-commit hook pycqa/isort to v9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/50b7c1e2e1cc859207fbf3dbea62023f7c3dd362\"\u003e\u003ccode\u003e50b7c1e\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency isort to v9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/dc9afed2fd6a2a1b6968d0adfa45e36919281d26\"\u003e\u003ccode\u003edc9afed\u003c/code\u003e\u003c/a\u003e chore(deps): update all non-major dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/c56d5fdf55b51000ca755c345c809ccb1ffcde64\"\u003e\u003ccode\u003ec56d5fd\u003c/code\u003e\u003c/a\u003e chore(deps): update gitlab/gitlab-ee docker tag to v19.3.1-ee.0 (\u003ca href=\"https://redirect.github.com/python-gitlab/python-gitlab/issues/3443\"\u003e#3443\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/30326676a0515511f5cf6423a9d8b8fc14f9e1ab\"\u003e\u003ccode\u003e3032667\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency types-setuptools to v84\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-gitlab/python-gitlab/commit/f4a643fab943bf7316544cb1641887b3551bfd5a\"\u003e\u003ccode\u003ef4a643f\u003c/code\u003e\u003c/a\u003e chore(deps): update pre-commit hook maxbrunet/pre-commit-renovate to v44\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-gitlab/python-gitlab/compare/v8.3.0...v8.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `starlette-context` from 0.3.6 to 0.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tomwojcik/starlette-context/releases\"\u003estarlette-context's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eHeaderKeys\u003c/code\u003e enum \u003ccode\u003estr()\u003c/code\u003e behavior inconsistency across Python versions (\u003ca href=\"https://redirect.github.com/tomwojcik/starlette-context/pull/192\"\u003e#192\u003c/a\u003e). On Python 3.11+, \u003ccode\u003estr(HeaderKeys.api_key)\u003c/code\u003e returned \u003ccode\u003e\u0026quot;HeaderKeys.api_key\u0026quot;\u003c/code\u003e instead of \u003ccode\u003e\u0026quot;X-API-Key\u0026quot;\u003c/code\u003e. Now uses \u003ccode\u003eStrEnum\u003c/code\u003e for consistent behavior across all supported Python versions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13 and 3.14\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9. Now only 3.10+ is supported\u003c/li\u003e\n\u003cli\u003eMigrate from Poetry to \u003ca href=\"https://docs.astral.sh/uv/\"\u003euv\u003c/a\u003e as the package manager and build tool\u003c/li\u003e\n\u003cli\u003eSwitch build backend from poetry-core to hatchling\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eassert\u003c/code\u003e with \u003ccode\u003eConfigurationError\u003c/code\u003e in \u003ccode\u003ePlugin.process_request\u003c/code\u003e for clearer error messages\u003c/li\u003e\n\u003cli\u003eReplace Black with \u003ccode\u003eruff format\u003c/code\u003e for code formatting\u003c/li\u003e\n\u003cli\u003eReplace deprecated \u003ccode\u003eHTTP_422_UNPROCESSABLE_ENTITY\u003c/code\u003e with \u003ccode\u003eHTTP_422_UNPROCESSABLE_CONTENT\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.8. Now only 3.9+ is supported ( \u003ca href=\"https://redirect.github.com/tomwojcik/starlette-context/pull/152/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711R29\"\u003etomwojcik/starlette-context#152\u003c/a\u003e )\u003c/li\u003e\n\u003cli\u003eDrop support for Starlette versions below 0.27.0 ( released May 16, 2023) ( \u003ca href=\"https://redirect.github.com/tomwojcik/starlette-context/pull/152/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711R30\"\u003etomwojcik/starlette-context#152\u003c/a\u003e )\u003c/li\u003e\n\u003cli\u003eDrop \u003ccode\u003eContextMiddleware\u003c/code\u003e deprecation warning as Starlette no longer plans to deprecate it ( \u003ca href=\"https://github.com/encode/starlette/discussions/2160#discussioncomment-6053386\"\u003ehttps://github.com/encode/starlette/discussions/2160#discussioncomment-6053386\u003c/a\u003e )\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003estarlette-context\u003c/code\u003e potentially breaking if \u003ccode\u003eContextMiddleware\u003c/code\u003e is used along with \u003ccode\u003estarlette\u0026gt;=0.41.3\u003c/code\u003e ( \u003ca href=\"https://redirect.github.com/tomwojcik/starlette-context/issues/151\"\u003etomwojcik/starlette-context#151\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/tomwojcik/starlette-context/commit/9ac36342c2c111b946377f734f0fa753fe4d1a0b\"\u003e\u003ccode\u003e9ac3634\u003c/code\u003e\u003c/a\u003e Bump version to 0.5.1, update changelog and authors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/0ee5c58e8e9479dcf5a6e56ab9e9952a9edd723e\"\u003e\u003ccode\u003e0ee5c58\u003c/code\u003e\u003c/a\u003e improve codecov after \u003ca href=\"https://redirect.github.com/tomwojcik/starlette-context/pull/192\"\u003etomwojcik/starlette-context#192\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/ad81772fda4ec04a1b53f711b28c8b99eced512e\"\u003e\u003ccode\u003ead81772\u003c/code\u003e\u003c/a\u003e Added test for consistent enum behavior\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/410805d7f71d5e43c7798df12f5cb0e31f2c4bdd\"\u003e\u003ccode\u003e410805d\u003c/code\u003e\u003c/a\u003e Make pre-3.11 behavior with post-3.11\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/0c5470f00816dd9bfd4ea1330c8d748697676c9d\"\u003e\u003ccode\u003e0c5470f\u003c/code\u003e\u003c/a\u003e improve docs and tests post \u003ca href=\"https://github.com/tomwojcik/starlette-context/pu\"\u003ehttps://github.com/tomwojcik/starlette-context/pu\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/bc0a78f33e9573c83e4639579b04f6cece5ba524\"\u003e\u003ccode\u003ebc0a78f\u003c/code\u003e\u003c/a\u003e Add background task context tests and update documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/2ed7b7418f2c45a598307d86372b340ccf8e866a\"\u003e\u003ccode\u003e2ed7b74\u003c/code\u003e\u003c/a\u003e Bump astral-sh/setup-uv from 5 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/e0e57ff6e2cbaa0853af9e442ce74fd2297d08ee\"\u003e\u003ccode\u003ee0e57ff\u003c/code\u003e\u003c/a\u003e Only upload codecov for latest Python/Starlette matrix entry\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/cde22598aa17a6e9bbd1208c63f88f50792e5300\"\u003e\u003ccode\u003ecde2259\u003c/code\u003e\u003c/a\u003e Limit sdist contents to package source and essential files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tomwojcik/starlette-context/commit/af8d901ff132857b5b82f3dbb4b3c2d76cfdabab\"\u003e\u003ccode\u003eaf8d901\u003c/code\u003e\u003c/a\u003e Fix documentation examples and modernize project tooling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tomwojcik/starlette-context/compare/v0.3.6...v0.5.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.52.4 to 0.54.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.54.0\u003c/h2\u003e\n\u003ch2\u003e📨 Send metadata after the response body\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.54.0 adds response trailers and \u003ccode\u003e103 Early Hints\u003c/code\u003e to its experimental HTTP/2 implementation through \u003ccode\u003ezttp\u003c/code\u003e.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.54.0 \u0026quot;zttp\u0026gt;=0.0.34\u0026quot;\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend HTTP/2 response trailers\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e). The ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension lets applications send metadata, such as checksums, after the response body. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them. Multiple trailer messages are combined before completing the response.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental and opt-in.\u003c/strong\u003e Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Upgrade-based h2c and WebSockets over HTTP/2 remain unsupported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e💡 Hint at resources before the final response\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend \u003ccode\u003e103 Early Hints\u003c/code\u003e over HTTP/2\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e). Applications can use the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension to send resource hints before the final response. Each supplied link becomes a separate \u003ccode\u003eLink\u003c/code\u003e header.\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.53.0...0.54.0\"\u003e0.53.0...0.54.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.53.0\u003c/h2\u003e\n\u003ch2\u003e🌐 Opt-in HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.53.0 adds experimental HTTP/2 through \u003ccode\u003ezttp\u003c/code\u003e, alongside a new \u003ccode\u003ezuvloop\u003c/code\u003e integration and connection-handling improvements.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.53.0\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eServe HTTP/1.1 and HTTP/2 with \u003ccode\u003ezttp\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e). Install \u003ccode\u003ezttp\u003c/code\u003e, then enable HTTP/2 with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Uvicorn negotiates HTTP/2 over TLS with ALPN and supports cleartext prior knowledge.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental.\u003c/strong\u003e Upgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚙️ More event loop choice\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eRun Uvicorn with \u003ccode\u003ezuvloop\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e). Install \u003ccode\u003ezuvloop\u003c/code\u003e separately and select it explicitly with \u003ccode\u003e--loop zuvloop\u003c/code\u003e on CPython 3.14 or newer.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🛡️ More reliable connections and proxies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHonor \u003ccode\u003eConnection: close\u003c/code\u003e token lists\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e). Uvicorn now parses comma-separated tokens case-insensitively across HTTP implementations.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTrust IPv6 loopback proxies by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e). The default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value now includes \u003ccode\u003e::1\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKeep upgraded WebSockets alive\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e). Uvicorn cancels the HTTP keep-alive timer when the connection becomes a WebSocket.\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.52.4...0.53.0\"\u003e0.52.4...0.53.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.54.0 (September 24, 2026)\u003c/h2\u003e\n\u003cp\u003eHTTP/2 support remains experimental. Install \u003ccode\u003ezttp\u0026gt;=0.0.34\u003c/code\u003e and enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd HTTP/2 response trailers through the ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd HTTP/2 \u003ccode\u003e103 Early Hints\u003c/code\u003e through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.53.0 (September 14, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release adds experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e. Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\nUpgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003ezuvloop\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle comma-separated, case-insensitive \u003ccode\u003eConnection: close\u003c/code\u003e tokens across HTTP implementations (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTrust IPv6 loopback in the default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancel the HTTP keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\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.co...\n\n_Description has been truncated_","html_url":"https://github.com/JWEB0689/pr-agent/pull/22","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/JWEB0689%2Fpr-agent/issues/22","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/22/packages"}},{"old_version":"2.13.5","new_version":"2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-26T09:42:06.000Z","version_change":"2.13.5 → 2.14.1","issue":{"uuid":"6037139143","node_id":"PR_kwDOVMrGps8AAAABKu7R3g","number":6,"state":"open","title":"chore(ci): bump the ci-requirements group across 1 directory with 9 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-10-26T09:42:06.000Z","updated_at":"2026-10-26T09:42:10.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(ci): bump","group_name":"ci-requirements","update_count":9,"packages":[{"name":"pip","old_version":"26.2.1","new_version":"26.2.2","repository_url":"https://github.com/pypa/pip"},{"name":"uv","old_version":"0.12.18","new_version":"0.13.1","repository_url":"https://github.com/astral-sh/uv"},{"name":"pydantic","old_version":"2.13.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"semgrep","old_version":"1.179.0","new_version":"1.181.0","repository_url":"https://github.com/semgrep/semgrep"},{"name":"pymdown-extensions","old_version":"12.1","new_version":"12.3","repository_url":"https://github.com/facelessuser/pymdown-extensions"},{"name":"fastapi","old_version":"0.142.4","new_version":"0.146.0","repository_url":"https://github.com/fastapi/fastapi"},{"name":"hypothesis","old_version":"6.168.5","new_version":"6.170.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"pre-commit","old_version":"4.6.2","new_version":"4.7.0","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"ruff","old_version":"0.16.10","new_version":"0.17.1","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the ci-requirements group with 9 updates in the /.github/requirements directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pip](https://github.com/pypa/pip) | `26.2.1` | `26.2.2` |\n| [uv](https://github.com/astral-sh/uv) | `0.12.18` | `0.13.1` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.5` | `2.14.1` |\n| [semgrep](https://github.com/semgrep/semgrep) | `1.179.0` | `1.181.0` |\n| [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) | `12.1` | `12.3` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.142.4` | `0.146.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.168.5` | `6.170.2` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.2` | `4.7.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.10` | `0.17.1` |\n\n\nUpdates `pip` from 26.2.1 to 26.2.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/pip/blob/main/NEWS.rst\"\u003epip's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e26.2.2 (2026-10-20)\u003c/h1\u003e\n\u003ch2\u003eVendored Libraries\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade certifi to 2026.10.19\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip/commit/b3b696fe2122f2339d782517559bfade2cb6b879\"\u003e\u003ccode\u003eb3b696f\u003c/code\u003e\u003c/a\u003e Bump for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip/commit/b0c56c14579ea421d4825dfbc8a3bd819322d81f\"\u003e\u003ccode\u003eb0c56c1\u003c/code\u003e\u003c/a\u003e Upgrade certifi to 2026.10.19\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pypa/pip/compare/26.2.1...26.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uv` from 0.12.18 to 0.13.1\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.13.1\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-14.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore \u003ccode\u003eRequires-Python\u003c/code\u003e upper bounds in \u003ccode\u003euv pip check\u003c/code\u003e and \u003ccode\u003euv pip install --strict\u003c/code\u003e, consistent with resolution (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22500\"\u003e#22500\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Linux SPARC by falling back when filesystem cloning and detailed cache accounting are unavailable (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22463\"\u003e#22463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReport missing trusted hashes in resolution errors (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22241\"\u003e#22241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePython\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CPython 3.16.0a1 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22527\"\u003e#22527\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow \u003ccode\u003euv tool upgrade\u003c/code\u003e to upgrade installed tools when \u003ccode\u003etool-install-locks\u003c/code\u003e is enabled (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22498\"\u003e#22498\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd preliminary support for parsing PEP 825 variant labels in wheel filenames with \u003ccode\u003ewheel-variants\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22039\"\u003e#22039\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReduce uv's binary size (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22429\"\u003e#22429\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22430\"\u003e#22430\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22432\"\u003e#22432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSpeed up Simple API parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22429\"\u003e#22429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReduce package metadata parsing overhead (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22239\"\u003e#22239\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent tool and managed Python uninstalls from deleting unrelated files beside their storage directories (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22495\"\u003e#22495\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestore support for source distributions containing hard links or full-length tar user or group names (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22516\"\u003e#22516\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22522\"\u003e#22522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve device files and FIFOs used as \u003ccode\u003euv pip compile\u003c/code\u003e or \u003ccode\u003euv export\u003c/code\u003e output destinations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22496\"\u003e#22496\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003esys._base_executable\u003c/code\u003e detection for environments created from symlinked interpreters (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22520\"\u003e#22520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent concurrent readers from observing partially written lockfiles, Python version files, or managed Python sysconfig files (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22399\"\u003e#22399\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22402\"\u003e#22402\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22403\"\u003e#22403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSerialize concurrent project commands that reach the same environment through real and symlinked paths (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22390\"\u003e#22390\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent installs, syncs, and environment creation from failing when they race with \u003ccode\u003euv cache clean\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22387\"\u003e#22387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent concurrent tool installations from corrupting an environment when the last tool is uninstalled (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22391\"\u003e#22391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePersist changed upgrade settings even when \u003ccode\u003euv tool upgrade\u003c/code\u003e leaves the tool version unchanged (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22499\"\u003e#22499\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse environments with installed Git dependencies pinned to full commit hashes without resolving again (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22464\"\u003e#22464\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplain how to select an emulated Python interpreter on Windows ARM64 when native wheels are unavailable (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22424\"\u003e#22424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix the \u003ccode\u003e.netrc\u003c/code\u003e format documentation link (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22514\"\u003e#22514\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePublish Python 3.15-based uv Docker images under stable tags (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22503\"\u003e#22503\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall uv 0.13.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/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.13.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-14.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore \u003ccode\u003eRequires-Python\u003c/code\u003e upper bounds in \u003ccode\u003euv pip check\u003c/code\u003e and \u003ccode\u003euv pip install --strict\u003c/code\u003e, consistent with resolution (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22500\"\u003e#22500\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Linux SPARC by falling back when filesystem cloning and detailed cache accounting are unavailable (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22463\"\u003e#22463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReport missing trusted hashes in resolution errors (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22241\"\u003e#22241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePython\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CPython 3.16.0a1 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22527\"\u003e#22527\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow \u003ccode\u003euv tool upgrade\u003c/code\u003e to upgrade installed tools when \u003ccode\u003etool-install-locks\u003c/code\u003e is enabled (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22498\"\u003e#22498\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd preliminary support for parsing PEP 825 variant labels in wheel filenames with \u003ccode\u003ewheel-variants\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22039\"\u003e#22039\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReduce uv's binary size (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22429\"\u003e#22429\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22430\"\u003e#22430\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22432\"\u003e#22432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSpeed up Simple API parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22429\"\u003e#22429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReduce package metadata parsing overhead (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22239\"\u003e#22239\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent tool and managed Python uninstalls from deleting unrelated files beside their storage directories (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22495\"\u003e#22495\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestore support for source distributions containing hard links or full-length tar user or group names (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22516\"\u003e#22516\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22522\"\u003e#22522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve device files and FIFOs used as \u003ccode\u003euv pip compile\u003c/code\u003e or \u003ccode\u003euv export\u003c/code\u003e output destinations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22496\"\u003e#22496\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003esys._base_executable\u003c/code\u003e detection for environments created from symlinked interpreters (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22520\"\u003e#22520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent concurrent readers from observing partially written lockfiles, Python version files, or managed Python sysconfig files (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22399\"\u003e#22399\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22402\"\u003e#22402\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22403\"\u003e#22403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSerialize concurrent project commands that reach the same environment through real and symlinked paths (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22390\"\u003e#22390\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent installs, syncs, and environment creation from failing when they race with \u003ccode\u003euv cache clean\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22387\"\u003e#22387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent concurrent tool installations from corrupting an environment when the last tool is uninstalled (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22391\"\u003e#22391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePersist changed upgrade settings even when \u003ccode\u003euv tool upgrade\u003c/code\u003e leaves the tool version unchanged (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22499\"\u003e#22499\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse environments with installed Git dependencies pinned to full commit hashes without resolving again (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22464\"\u003e#22464\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplain how to select an emulated Python interpreter on Windows ARM64 when native wheels are unavailable (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22424\"\u003e#22424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix the \u003ccode\u003e.netrc\u003c/code\u003e format documentation link (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22514\"\u003e#22514\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePublish Python 3.15-based uv Docker images under stable tags (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/22503\"\u003e#22503\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.13.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-09.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/62faed3351cfee2121b3c28b937b1f4b93233a93\"\u003e\u003ccode\u003e62faed3\u003c/code\u003e\u003c/a\u003e Bump version to 0.13.1 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22525\"\u003e#22525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/01bfd2279db7567446e6fa8f08198c7165a3ade4\"\u003e\u003ccode\u003e01bfd22\u003c/code\u003e\u003c/a\u003e Sync latest Python releases (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22527\"\u003e#22527\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/07ab80e743b83b910da7312eebb9c0346fe51365\"\u003e\u003ccode\u003e07ab80e\u003c/code\u003e\u003c/a\u003e Avoid linking the Zstandard ZIP encoder (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22432\"\u003e#22432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/66cea0c1027999d1bfc7f69258942cc8392c4186\"\u003e\u003ccode\u003e66cea0c\u003c/code\u003e\u003c/a\u003e Keep large Debug formatters out of line (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22430\"\u003e#22430\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/d7eb7ab1142e0da5b3694dd055973a7e3baa0089\"\u003e\u003ccode\u003ed7eb7ab\u003c/code\u003e\u003c/a\u003e Deserialize dependency overrides and Simple API fields directly (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22429\"\u003e#22429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/b757f15552203f42d8081b2378955e725cd732ce\"\u003e\u003ccode\u003eb757f15\u003c/code\u003e\u003c/a\u003e Revert interpreter cache warming (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22520\"\u003e#22520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/c977e8e13b9aa3caa572654e47bf1c51a362f6d1\"\u003e\u003ccode\u003ec977e8e\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ebot:automerge\u003c/code\u003e for promoted pull requests (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22523\"\u003e#22523\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/4f14d44ce52fe64bd007fdcb5564ac4a9629c262\"\u003e\u003ccode\u003e4f14d44\u003c/code\u003e\u003c/a\u003e Require hashes for uv's build dependencies (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22517\"\u003e#22517\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/06bf2e81489ea54db0861ad5896c28e70a44d8a3\"\u003e\u003ccode\u003e06bf2e8\u003c/code\u003e\u003c/a\u003e Bump tar-codec to 0.0.15 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22522\"\u003e#22522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/6609cfd7af6474cf87c1112661c0f227b45f36c4\"\u003e\u003ccode\u003e6609cfd\u003c/code\u003e\u003c/a\u003e Use async I/O and atomic pkgconfig writes for managed Python setup (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/22521\"\u003e#22521\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/uv/compare/0.12.18...0.13.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `semgrep` from 1.179.0 to 1.181.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/semgrep/semgrep/releases\"\u003esemgrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.181.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.181.0\"\u003e1.181.0\u003c/a\u003e - 2026-10-14\u003c/h2\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003esemgrep scan\u003c/code\u003e now uses the same asynchronous configuration generation and retries as \u003ccode\u003esemgrep ci\u003c/code\u003e when fetching platform scan configurations. (CODE-9930)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePython only: Supply Chain now reports every package declared in a \u003ccode\u003erequirements.txt\u003c/code\u003e, not only the ones pinned with \u003ccode\u003e==\u003c/code\u003e. A requirement with a version range (\u003ccode\u003erequests\u0026gt;=2.0\u003c/code\u003e, \u003ccode\u003enumpy~=1.26\u003c/code\u003e, \u003ccode\u003edjango==2.2.*\u003c/code\u003e, \u003ccode\u003erequests (\u0026gt;=2.0)\u003c/code\u003e) is reported with the declared specifier as its version, and a bare name (\u003ccode\u003eflask\u003c/code\u003e) is reported with an empty version, so they appear in the dependency inventory and SBOM instead of being dropped with a \u0026quot;not pinned to an exact version\u0026quot; parse error. These dependencies have no definitive installed version, so for now they produce no Supply Chain findings. When there is no \u003ccode\u003erequirements.in\u003c/code\u003e manifest to consult, a range or bare-name line is reported as a direct dependency, since it was declared by hand rather than written by a resolver; exact pins keep their previous unknown transitivity. Local path and URL lines are no longer reported as parse errors, while a line whose leading token is not a valid package name (\u003ccode\u003erequests$foo\u0026gt;=1\u003c/code\u003e) is now reported as a parse error instead of being dropped silently. Other ecosystems and other Python manifest formats are unchanged. (SC-3487)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003epro: Various performance improvements for historical secrets scanning. (SCRT-983-historical-performance)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ego grammar update (v0.23.4):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eGo target parsing now supports composite type-set constraints and shorthand union constraints on type parameters, preserving underlying-type markers and all union members. Literal generic rule-pattern syntax remains unchanged.\u003c/li\u003e\n\u003cli\u003eGo target parsing now supports embedded generic struct fields, including pointer and package-qualified embeddings, while retaining their type arguments.\u003c/li\u003e\n\u003cli\u003eGo target parsing now supports standalone generic function instantiations with multiple or composite type arguments, such as Pair[int, string] and Identity[[]int], including qualified function names.\u003c/li\u003e\n\u003cli\u003eGo target parsing now accepts Unicode decimal digits after the first character of an identifier, including Arabic-Indic and Devanagari digits.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(go-v0.23.4)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHack grammar update:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHack target parsing now supports capability lists on functions, methods, function types, lambdas, and anonymous functions, including empty lists and context-dependent capabilities.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports context constants with capability bounds or initializers, preserving the distinction between super bounds, as bounds, and assigned capabilities. Unbounded abstract context constants retain their existing representation limitation.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports concrete and abstract enum classes with typed members, plus qualified and unqualified enum class labels.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports function and static-method references with empty or explicit type arguments, such as foo\u0026lt;\u0026gt; and MyClass::bar\u003c!-- raw HTML omitted --\u003e.\u003c/li\u003e\n\u003cli\u003eHack target parsing now preserves type arguments on calls and constructors such as foo\u003c!-- raw HTML omitted --\u003e(), $obj-\u0026gt;bar\u003c!-- raw HTML omitted --\u003e(...), and new MyClass\u003c!-- raw HTML omitted --\u003e(...), matching other languages' typed-call representation.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports expression-tree literals such as Example\u003ccode\u003e1 + 2\u003c/code\u003e, preserving the visitor and body text. Embedded DSL bodies remain opaque rather than being parsed as Hack expressions.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports file-level attributes such as \u0026lt;\u0026lt;file: SomeAttribute(...)\u0026gt;\u0026gt;, preserving attribute names and arguments.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports internal visibility on methods and properties, keeping it distinct from public, protected, and private visibility.\u003c/li\u003e\n\u003cli\u003eHack target parsing now accepts namespace-relative names such as namespace\\run() and include/require member names in piped expressions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(hack-1a7ded90288189746c54861ac144ede97df95081)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003epro: Historical secrets scanning no longer aborts when preparatory \u003ccode\u003egit gc\u003c/code\u003e\nfails. (SCRT-982-historical-gc-nonfatal)\u003c/li\u003e\n\u003cli\u003eSupply Chain: lockfileless Gradle resolution now tells the dependency graph\nplugin where to write its report, so builds that relocate their build\ndirectory resolve instead of failing. When the plugin writes no report, the\nscan reports a resolution error that includes the Gradle log instead of\ncrashing on the missing file. (code-9953)\u003c/li\u003e\n\u003cli\u003eSupply Chain: lockfileless Gradle and Maven scans now report incomplete\ndependency resolution when dependencies or transitive metadata cannot be\nresolved. Registry HTTP failures include the affected URL when available. (sc-3358)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Infra/Release Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eForward optional job context when registering CLI scans. (SMS-3333)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.180.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.180.0\"\u003e1.180.0\u003c/a\u003e - 2026-10-07\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/semgrep/semgrep/blob/develop/CHANGELOG.md\"\u003esemgrep's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.181.0\"\u003e1.181.0\u003c/a\u003e - 2026-10-14\u003c/h2\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003esemgrep scan\u003c/code\u003e now uses the same asynchronous configuration generation and retries as \u003ccode\u003esemgrep ci\u003c/code\u003e when fetching platform scan configurations. (CODE-9930)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePython only: Supply Chain now reports every package declared in a \u003ccode\u003erequirements.txt\u003c/code\u003e, not only the ones pinned with \u003ccode\u003e==\u003c/code\u003e. A requirement with a version range (\u003ccode\u003erequests\u0026gt;=2.0\u003c/code\u003e, \u003ccode\u003enumpy~=1.26\u003c/code\u003e, \u003ccode\u003edjango==2.2.*\u003c/code\u003e, \u003ccode\u003erequests (\u0026gt;=2.0)\u003c/code\u003e) is reported with the declared specifier as its version, and a bare name (\u003ccode\u003eflask\u003c/code\u003e) is reported with an empty version, so they appear in the dependency inventory and SBOM instead of being dropped with a \u0026quot;not pinned to an exact version\u0026quot; parse error. These dependencies have no definitive installed version, so for now they produce no Supply Chain findings. When there is no \u003ccode\u003erequirements.in\u003c/code\u003e manifest to consult, a range or bare-name line is reported as a direct dependency, since it was declared by hand rather than written by a resolver; exact pins keep their previous unknown transitivity. Local path and URL lines are no longer reported as parse errors, while a line whose leading token is not a valid package name (\u003ccode\u003erequests$foo\u0026gt;=1\u003c/code\u003e) is now reported as a parse error instead of being dropped silently. Other ecosystems and other Python manifest formats are unchanged. (SC-3487)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003epro: Various performance improvements for historical secrets scanning. (SCRT-983-historical-performance)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ego grammar update (v0.23.4):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eGo target parsing now supports composite type-set constraints and shorthand union constraints on type parameters, preserving underlying-type markers and all union members. Literal generic rule-pattern syntax remains unchanged.\u003c/li\u003e\n\u003cli\u003eGo target parsing now supports embedded generic struct fields, including pointer and package-qualified embeddings, while retaining their type arguments.\u003c/li\u003e\n\u003cli\u003eGo target parsing now supports standalone generic function instantiations with multiple or composite type arguments, such as Pair[int, string] and Identity[[]int], including qualified function names.\u003c/li\u003e\n\u003cli\u003eGo target parsing now accepts Unicode decimal digits after the first character of an identifier, including Arabic-Indic and Devanagari digits.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(go-v0.23.4)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHack grammar update:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHack target parsing now supports capability lists on functions, methods, function types, lambdas, and anonymous functions, including empty lists and context-dependent capabilities.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports context constants with capability bounds or initializers, preserving the distinction between super bounds, as bounds, and assigned capabilities. Unbounded abstract context constants retain their existing representation limitation.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports concrete and abstract enum classes with typed members, plus qualified and unqualified enum class labels.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports function and static-method references with empty or explicit type arguments, such as foo\u0026lt;\u0026gt; and MyClass::bar\u003c!-- raw HTML omitted --\u003e.\u003c/li\u003e\n\u003cli\u003eHack target parsing now preserves type arguments on calls and constructors such as foo\u003c!-- raw HTML omitted --\u003e(), $obj-\u0026gt;bar\u003c!-- raw HTML omitted --\u003e(...), and new MyClass\u003c!-- raw HTML omitted --\u003e(...), matching other languages' typed-call representation.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports expression-tree literals such as Example\u003ccode\u003e1 + 2\u003c/code\u003e, preserving the visitor and body text. Embedded DSL bodies remain opaque rather than being parsed as Hack expressions.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports file-level attributes such as \u0026lt;\u0026lt;file: SomeAttribute(...)\u0026gt;\u0026gt;, preserving attribute names and arguments.\u003c/li\u003e\n\u003cli\u003eHack target parsing now supports internal visibility on methods and properties, keeping it distinct from public, protected, and private visibility.\u003c/li\u003e\n\u003cli\u003eHack target parsing now accepts namespace-relative names such as namespace\\run() and include/require member names in piped expressions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(hack-1a7ded90288189746c54861ac144ede97df95081)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003epro: Historical secrets scanning no longer aborts when preparatory \u003ccode\u003egit gc\u003c/code\u003e\nfails. (SCRT-982-historical-gc-nonfatal)\u003c/li\u003e\n\u003cli\u003eSupply Chain: lockfileless Gradle resolution now tells the dependency graph\nplugin where to write its report, so builds that relocate their build\ndirectory resolve instead of failing. When the plugin writes no report, the\nscan reports a resolution error that includes the Gradle log instead of\ncrashing on the missing file. (code-9953)\u003c/li\u003e\n\u003cli\u003eSupply Chain: lockfileless Gradle and Maven scans now report incomplete\ndependency resolution when dependencies or transitive metadata cannot be\nresolved. Registry HTTP failures include the affected URL when available. (sc-3358)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Infra/Release Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eForward optional job context when registering CLI scans. (SMS-3333)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.180.0\"\u003e1.180.0\u003c/a\u003e - 2026-10-07\u003c/h2\u003e\n\u003ch3\u003e### Added\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/semgrep/semgrep/commit/72d3525fe7e02f486428386078f192f8c4756804\"\u003e\u003ccode\u003e72d3525\u003c/code\u003e\u003c/a\u003e chore: release 1.181.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/51602ad27f09ef9342a5620601de5ef8f572fbc6\"\u003e\u003ccode\u003e51602ad\u003c/code\u003e\u003c/a\u003e feat(sca): Report unpinned requirements.txt dependencies instead of skipping ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/3be31ed6f1d60b41104776656bfca240f848796a\"\u003e\u003ccode\u003e3be31ed\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#7161\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/460ef57171c87544db5d2c18ba92da431c0bc3d5\"\u003e\u003ccode\u003e460ef57\u003c/code\u003e\u003c/a\u003e fix(sca): Pin the Gradle dependency graph report dir and report a missing gra...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/945793a4532ade2bf79581b677bcfbb7fecf323b\"\u003e\u003ccode\u003e945793a\u003c/code\u003e\u003c/a\u003e fix(ci): unlink openssl@3 before brew installs on macOS jobs (CODE-10023) (se...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/2c029cdf2bf48abb6af684d106e712456060099e\"\u003e\u003ccode\u003e2c029cd\u003c/code\u003e\u003c/a\u003e feat(cli): Share async config fetching between scan and ci (semgrep/semgrep-p...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/7cae498f8ad8b96c47f53a8eafd34ad77dbd58d3\"\u003e\u003ccode\u003e7cae498\u003c/code\u003e\u003c/a\u003e feat(cli): forward opaque job context at scan registration (semgrep/semgrep-p...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/d8345fdf2185605485a03bffef7f1ff5ccb8f809\"\u003e\u003ccode\u003ed8345fd\u003c/code\u003e\u003c/a\u003e fix(grammar-update): Claude output budget and c-sharp-pro fyi.list (semgrep/s...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/14a2d0480f53ffc60256cb23a0997cbd43e58076\"\u003e\u003ccode\u003e14a2d04\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#7199\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/ad199376ccea420f1cd771fec9ae918f12f74569\"\u003e\u003ccode\u003ead19937\u003c/code\u003e\u003c/a\u003e chore: regenerate parsers with tree-sitter 0.26.3 where possible (semgrep/sem...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/semgrep/semgrep/compare/v1.179.0...v1.181.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymdown-extensions` from 12.1 to 12.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/facelessuser/pymdown-extensions/releases\"\u003epymdown-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eNEW\u003c/strong\u003e: BetterEm: Expose a way to disable CommonMark punctuation rules in BetterEm if desired via a new\n\u003ccode\u003epunctuation\u003c/code\u003e option.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e12.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eNEW\u003c/strong\u003e: Add official support for Python 3.15.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNEW\u003c/strong\u003e: Tilde, Caret: For backwards compatibility, disable CommonMark punctuation rules by default. If subscript or\nsuperscript is disabled in the respective extension, CommonMark rules will be honored again. A new \u003ccode\u003epunctuation\u003c/code\u003e\nrule has been added to force CommonMark rules. When done, people will need to be aware of punctuation when subscript\nor superscript is enabled and escape any that violates CommonMark rules.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNEW\u003c/strong\u003e: Highlight: Highlight now allows in the \u003ccode\u003eauto_title_map\u003c/code\u003e specifying the title as a simple string or a\ndictionary containing the title and the title mode: either \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003ehtml\u003c/code\u003e, with \u003ccode\u003etext\u003c/code\u003e being the default. This\nallows a title to be specified and treated as HTML when the mode is \u003ccode\u003ehtml\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNEW\u003c/strong\u003e: SuperFences: Add new \u003ccode\u003etitle_mode\u003c/code\u003e option for Pygments fenced blocks that allows a user to specify a title\nto be treated as HTML via \u003ccode\u003etitle_mode=\u0026quot;html\u0026quot;\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/facelessuser/pymdown-extensions/commit/24ae2b301304dac7b8e3dc347dbbcaac36671a90\"\u003e\u003ccode\u003e24ae2b3\u003c/code\u003e\u003c/a\u003e Fix link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/f19f2d113893385f35737ddeaca3e8ce224709b2\"\u003e\u003ccode\u003ef19f2d1\u003c/code\u003e\u003c/a\u003e Allow disabling CommonMark punctuation rules in BetterEm\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/a656909d439b5570f12f9069d67adf163c8506b9\"\u003e\u003ccode\u003ea656909\u003c/code\u003e\u003c/a\u003e Docs: Fix duplicate word\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/0b905467cca69ac91aa4a9b0e5aa75abd93d6ede\"\u003e\u003ccode\u003e0b90546\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Fix lint\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/11fbe9f174beff658efaa05c958257e69c147aa3\"\u003e\u003ccode\u003e11fbe9f\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Drop Python 3.10 support\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/3b5e585144686c9ceae68ded8ce4f271332d779f\"\u003e\u003ccode\u003e3b5e585\u003c/code\u003e\u003c/a\u003e Docs: Fix grammar\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/91ec2a842a736f7f47b84850d8ffbb43d69b6c74\"\u003e\u003ccode\u003e91ec2a8\u003c/code\u003e\u003c/a\u003e Docs: Fix default admonition/details styling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/5d7efe44e03c9ff3bbd852fc7b44610210cc1ca7\"\u003e\u003ccode\u003e5d7efe4\u003c/code\u003e\u003c/a\u003e Docs: update js dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/195228a75fb7b739275ff3af1a6f343e51cf1bf9\"\u003e\u003ccode\u003e195228a\u003c/code\u003e\u003c/a\u003e Fix lint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/facelessuser/pymdown-extensions/commit/ff07dc2722d1ea9c1fc780355fd39b329929570a\"\u003e\u003ccode\u003eff07dc2\u003c/code\u003e\u003c/a\u003e Drop Python 3.10 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/facelessuser/pymdown-extensions/compare/12.1...12.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi` from 0.142.4 to 0.146.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.146.0\u003c/h2\u003e\n\u003cp\u003eThe \u003ccode\u003eroot_path\u003c/code\u003e parameter in \u003ccode\u003eFastAPI()\u003c/code\u003e is deprecated. Configure the server with \u003ccode\u003efastapi run --root-path /api/v1\u003c/code\u003e instead.\u003c/p\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🗑️ Deprecate the \u003ccode\u003eroot_path\u003c/code\u003e parameter in \u003ccode\u003eFastAPI\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16520\"\u003e#16520\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.145.0\u003c/h2\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔥 Remove deprecated \u003ccode\u003eopenapi_prefix\u003c/code\u003e and unused \u003ccode\u003e**extra\u003c/code\u003e from \u003ccode\u003eFastAPI\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16518\"\u003e#16518\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 URL paths in templates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16517\"\u003e#16517\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.144.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add WebSocket support to security dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/10147\"\u003e#10147\u003c/a\u003e by \u003ca href=\"https://github.com/mnixry\"\u003e\u003ccode\u003e@​mnixry\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.143.5\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix handling of empty value for \u003ccode\u003ebyte\u003c/code\u003e file list parameter. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/9383\"\u003e#9383\u003c/a\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.143.4\u003c/h2\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Add httpx2 to optional dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16512\"\u003e#16512\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.143.3\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix non-finite float serialization in JSONL and SSE streams. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16509\"\u003e#16509\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🎨 Update Python format in Markdown with Ruff. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16505\"\u003e#16505\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.143.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix blocking frontend fallback file checks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16503\"\u003e#16503\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16500\"\u003e#16500\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16499\"\u003e#16499\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16501\"\u003e#16501\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3070b5105fe02c4afdba5e3aea6c2cf2e3796c7f\"\u003e\u003ccode\u003e3070b51\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.146.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16521\"\u003e#16521\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/a17bd595ae17d5b8ec01f2acc291f36844d478fe\"\u003e\u003ccode\u003ea17bd59\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/45c419938435d668a85a2e81bb9ac41495f8a648\"\u003e\u003ccode\u003e45c4199\u003c/code\u003e\u003c/a\u003e 🗑️ Deprecate the \u003ccode\u003eroot_path\u003c/code\u003e parameter in \u003ccode\u003eFastAPI\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16520\"\u003e#16520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/129c9cfcd33c3ed4371c9674e724fd838a292e2b\"\u003e\u003ccode\u003e129c9cf\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.145.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16519\"\u003e#16519\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/475b46638fd2ea6608f80418a6333a9107340e28\"\u003e\u003ccode\u003e475b466\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/a37a162de602049ab65595a98d88a75996ee6814\"\u003e\u003ccode\u003ea37a162\u003c/code\u003e\u003c/a\u003e 🔥 Remove deprecated \u003ccode\u003eopenapi_prefix\u003c/code\u003e and unused \u003ccode\u003e**extra\u003c/code\u003e from \u003ccode\u003eFastAPI\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16\"\u003e#16\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0ab3e037a6bd406ae8462841864b5c6337c8b329\"\u003e\u003ccode\u003e0ab3e03\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4f940b1b724626e74b944377051a801e0cd7686c\"\u003e\u003ccode\u003e4f940b1\u003c/code\u003e\u003c/a\u003e 📝 Document URL paths in templates (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16517\"\u003e#16517\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9528746e3493a1cdd17da2eff97c48ef65290713\"\u003e\u003ccode\u003e9528746\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.144.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16516\"\u003e#16516\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c18732cd43202c4cb310a8e6c1d75c2a6020294d\"\u003e\u003ccode\u003ec18732c\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.142.4...0.146.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.168.5 to 6.170.2\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/1555011e7eee2dec00cfcbfd802e921bd4262ed1\"\u003e\u003ccode\u003e1555011\u003c/code\u003e\u003c/a\u003e Bump hypothesis version to 6.170.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6a536f7f5eeba94cb3eaacbb8800ace70c469fbc\"\u003e\u003ccode\u003e6a536f7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4910\"\u003e#4910\u003c/a\u003e from HypothesisWorks/create-pull-request/patch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/1520429a50535de8b745a87a6d23f110ccb75045\"\u003e\u003ccode\u003e1520429\u003c/code\u003e\u003c/a\u003e nocover\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/d19a0a1e28f6d37fe27036bf5456918a457298a4\"\u003e\u003ccode\u003ed19a0a1\u003c/code\u003e\u003c/a\u003e wording\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7d31dd7d6dc2bcc603a91209fc362a69f8fb8a3d\"\u003e\u003ccode\u003e7d31dd7\u003c/code\u003e\u003c/a\u003e add support for 3.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/e783c53aba1767a62c5358b1b635cee320bd587e\"\u003e\u003ccode\u003ee783c53\u003c/code\u003e\u003c/a\u003e Add Python 3.15 trove classifier\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/b3af0ecfa54a76530dcc324df84834bf682560e3\"\u003e\u003ccode\u003eb3af0ec\u003c/code\u003e\u003c/a\u003e Update pinned dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/718686d1e392968eb0953c043ef249c5d9d11a59\"\u003e\u003ccode\u003e718686d\u003c/code\u003e\u003c/a\u003e Bump hypothesis version to 6.170.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/ba6c3e39cf741c226412194acc21ab719a35f6e7\"\u003e\u003ccode\u003eba6c3e3\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4834\"\u003e#4834\u003c/a\u003e from Zac-HD/claude/hypothesis-4458-prototypes-nqza1f\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7572cd07bbb9d845c40f71c95ba3853fb7467403\"\u003e\u003ccode\u003e7572cd0\u003c/code\u003e\u003c/a\u003e Bump hypothesis version to 6.170.0 and update changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/v6.168.5...v6.170.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 4.6.2 to 4.7.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.7.0\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks during commit with \u003ccode\u003e-a\u003c/code\u003e or inside a submodule.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3773\"\u003e#3773\u003c/a\u003e issue by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e PR by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.7.0 - 2026-10-12\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks during commit with \u003ccode\u003e-a\u003c/code\u003e or inside a submodule.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3773\"\u003e#3773\u003c/a\u003e issue by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e PR by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/65bb884a567e8be6adc51e8bfbcf26f708eb35a2\"\u003e\u003ccode\u003e65bb884\u003c/code\u003e\u003c/a\u003e v4.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/73926c191e10d2ede0ca627632e6e697d8092a61\"\u003e\u003ccode\u003e73926c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e from cbirkhold/node-no-git-env-npm-install\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/860d07d18211a0154ffaa4e77bf2a43c2b2473a9\"\u003e\u003ccode\u003e860d07d\u003c/code\u003e\u003c/a\u003e don't leak GIT_* env into \u003ccode\u003enpm install\u003c/code\u003e for \u003ccode\u003elanguage: node\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9ad8a0a99acec306e6e9c32490b0088008b83069\"\u003e\u003ccode\u003e9ad8a0a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3775\"\u003e#3775\u003c/a\u003e from pre-commit/contextlib-chdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9905e88afc7d860ccf21fba40fc9f5f23e0e0100\"\u003e\u003ccode\u003e9905e88\u003c/code\u003e\u003c/a\u003e use contextlib.chdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/59cb7925317a3c548ccb8cb17bbfb09d81ac8367\"\u003e\u003ccode\u003e59cb792\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3771\"\u003e#3771\u003c/a\u003e from pre-commit/all-repos_autofix_py311-plus\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2be170142fb6e0f1402a8bf036b5c9f8dd27fd09\"\u003e\u003ccode\u003e2be1701\u003c/code\u003e\u003c/a\u003e remove triple-nested withs for 3.14 coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/4c8d22aa125e68c6f45b4f71359c1bd7942f844f\"\u003e\u003ccode\u003e4c8d22a\u003c/code\u003e\u003c/a\u003e py311+\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/c4292384c94590cd8e6c68f677d95e3675994602\"\u003e\u003ccode\u003ec429238\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3770\"\u003e#3770\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f49e251f379f2c704e1223a791766e2bc9c78602\"\u003e\u003ccode\u003ef49e251\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.6.2...v4.7.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.16.10 to 0.17.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.17.1\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.17.1\u003c/h2\u003e\n\u003cp\u003e|  File  | Platform | Checksum |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.17.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-09.\u003c/p\u003e\n\u003cp\u003eThe executables in our macOS and Windows release archives and \u003ccode\u003eruff\u003c/code\u003e wheels are now code-signed.\nmacOS executables are signed with an Apple Developer ID certificate and notarized by Apple. Windows\nexecutables have timestamped Authenticode signatures from Azure Artifact Signing. This enables\nverification of the release publisher and binary integrity, supports publisher-based allowlisting,\nand should reduce security warnings and antivirus false positives.\u003c/p\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate the default and latest Python versions for 3.15 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28792\"\u003e#28792\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eRuff now defaults to Python 3.11 instead of 3.10 when no Python version is configured through\n\u003ca href=\"https://docs.astral.sh/ruff/settings/#target-version\"\u003e\u003ccode\u003etarget-version\u003c/code\u003e\u003c/a\u003e or\n\u003ca href=\"https://docs.astral.sh/ruff/configuration/#inferring-the-python-version\"\u003e\u003ccode\u003erequires-python\u003c/code\u003e\u003c/a\u003e. When\nchecking for syntax errors without a configured Python version, Ruff now defaults to Python 3.15\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/astral-sh/ruff/commit/4683270c69cbdaf6ad64d3f983fc458d5a43b41f\"\u003e\u003ccode\u003e4683270\u003c/code\u003e\u003c/a\u003e Bump version to 0.17.1 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29420\"\u003e#29420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3514027edb659bbc3c787d355be9d130e5587f15\"\u003e\u003ccode\u003e3514027\u003c/code\u003e\u003c/a\u003e [ty] Update typing conformance suite pin (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29417\"\u003e#29417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/829455624d78f2e89669e4b4b14af2b96abdb1ae\"\u003e\u003ccode\u003e8294556\u003c/code\u003e\u003c/a\u003e Update referenced PR security-review workflow (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29237\"\u003e#29237\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d1e1b1f69b511df4385f64b510eeec4da01c1a0e\"\u003e\u003ccode\u003ed1e1b1f\u003c/code\u003e\u003c/a\u003e [ty] Preserve recursive aliases when rebuilding intersections (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29057\"\u003e#29057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/93526150df078af7dd8fc4226cdcc469539d2001\"\u003e\u003ccode\u003e9352615\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/83a3afc3156d73ae4296f3fa74ede28e4c72bfcd\"\u003e\u003ccode\u003e83a3afc\u003c/code\u003e\u003c/a\u003e Fix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/b42a8734410230f4529151782cae951b99bed858\"\u003e\u003ccode\u003eb42a873\u003c/code\u003e\u003c/a\u003e [ty] Clarify object attribute write-contract rationale (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29384\"\u003e#29384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d01678ebf594c97a7767d4372061c1f80ae5b5bb\"\u003e\u003ccode\u003ed01678e\u003c/code\u003e\u003c/a\u003e [ty] Clarify object attribute write-contract rationale (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29384\"\u003e#29384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/355b42a7719d8a555e3ee50c89848b42d8a11eb5\"\u003e\u003ccode\u003e355b42a\u003c/code\u003e\u003c/a\u003e [ty] Avoid writable override contracts from object (\u003ca href=\"https://redirect.github.com/ast...\n\n_Description has been truncated_","html_url":"https://github.com/actions-marketplace-validations/lucashgrifoni_Secure-SDLC-Evidence-Collector/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/actions-marketplace-validations%2Flucashgrifoni_Secure-SDLC-Evidence-Collector/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"}},{"old_version":"2.13.4","new_version":"2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-26T09:16:59.000Z","version_change":"2.13.4 → 2.14.1","issue":{"uuid":"6036772460","node_id":"PR_kwDORBklHc8AAAABKuoMTA","number":847,"state":"closed","title":"chore(deps): Bump pydantic from 2.13.4 to 2.14.1","user":"dependabot[bot]","labels":["automated","dependencies","ready-to-merge"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-10-26T11:16:38.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-26T09:16:59.000Z","updated_at":"2026-10-26T11:16:38.000Z","time_to_close":7179,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","packages":[{"name":"pydantic","old_version":"2.13.4","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.13.4 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n","html_url":"https://github.com/endavis/pynetappfoundry/pull/847","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/endavis%2Fpynetappfoundry/issues/847","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/847/packages"}},{"old_version":"2.13.5","new_version":"2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-26T05:06:12.000Z","version_change":"2.13.5 → 2.14.1","issue":{"uuid":"6033704715","node_id":"PR_kwDOO5GJos8AAAABKsJ3fw","number":181,"state":"open","title":"[Chore] Bump the uv-minor-patch group across 1 directory with 11 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-26T05:06:12.000Z","updated_at":"2026-10-26T05:06:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"[Chore] Bump","group_name":"uv-minor-patch","update_count":11,"packages":[{"name":"aiohttp","old_version":"3.14.4","new_version":"3.14.5","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"fastapi","old_version":"0.142.2","new_version":"0.161.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"fonttools","old_version":"4.66.1","new_version":"4.67.0","repository_url":"https://github.com/fonttools/fonttools"},{"name":"granian","old_version":"2.8.4","new_version":"2.8.5","repository_url":"https://github.com/emmett-framework/granian"},{"name":"numpy","old_version":"2.5.3","new_version":"2.5.4","repository_url":"https://github.com/numpy/numpy"},{"name":"pydantic","old_version":"2.13.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.15.0","new_version":"2.16.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"opendal","old_version":"0.47.10","new_version":"0.47.12","repository_url":"https://github.com/apache/opendal"},{"name":"asyncpg","old_version":"0.31.0","new_version":"0.32.0","repository_url":"https://github.com/MagicStack/asyncpg"},{"name":"coverage","old_version":"7.16.2","new_version":"7.17.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"ruff","old_version":"0.16.10","new_version":"0.17.2","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv-minor-patch group with 11 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.14.4` | `3.14.5` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.142.2` | `0.161.1` |\n| [fonttools](https://github.com/fonttools/fonttools) | `4.66.1` | `4.67.0` |\n| [granian](https://github.com/emmett-framework/granian) | `2.8.4` | `2.8.5` |\n| [numpy](https://github.com/numpy/numpy) | `2.5.3` | `2.5.4` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.5` | `2.14.1` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.15.0` | `2.16.1` |\n| [opendal](https://github.com/apache/opendal) | `0.47.10` | `0.47.12` |\n| [asyncpg](https://github.com/MagicStack/asyncpg) | `0.31.0` | `0.32.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.16.2` | `7.17.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.10` | `0.17.2` |\n\n\nUpdates `aiohttp` from 3.14.4 to 3.14.5\nUpdates `fastapi` from 0.142.2 to 0.161.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.161.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix OpenAPI schemas for standalone nullable form unions. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16598\"\u003e#16598\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.161.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16596\"\u003e#16596\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.160.0\u003c/h2\u003e\n\u003cp\u003eQuery, header, cookie, and form parameter models now apply their \u003ccode\u003eextra\u003c/code\u003e configuration to all submitted fields in the same parameter location, consistent with Pydantic behavior. This includes fields declared in other models, individual parameters, or dependencies, which were previously excluded.\u003c/p\u003e\n\u003cp\u003eWith \u003ccode\u003eextra=\u0026quot;forbid\u0026quot;\u003c/code\u003e, fields outside the model are rejected even if another parameter declares them. With \u003ccode\u003eextra=\u0026quot;allow\u0026quot;\u003c/code\u003e, those fields are included as model extras. With the default \u003ccode\u003eextra=\u0026quot;ignore\u0026quot;\u003c/code\u003e, they are ignored.\u003c/p\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16594\"\u003e#16594\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump certifi from 2026.1.4 to 2026.10.19. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16571\"\u003e#16571\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.159.1\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16586\"\u003e#16586\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.159.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16584\"\u003e#16584\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.158.2\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16582\"\u003e#16582\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.158.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Preserve form media types in OpenAPI. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16579\"\u003e#16579\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.158.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16577\"\u003e#16577\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.157.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/69ddc2badf9da1123bba4d360225ae6b085985f6\"\u003e\u003ccode\u003e69ddc2b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.161.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16599\"\u003e#16599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0cafa07bd4e4c220169e27425f504af3b737d1f8\"\u003e\u003ccode\u003e0cafa07\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/f90d0369380a539c673b1bbbbd86535b8cdee746\"\u003e\u003ccode\u003ef90d036\u003c/code\u003e\u003c/a\u003e 🐛 Fix OpenAPI schemas for standalone nullable form unions (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16598\"\u003e#16598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/80c8742d141e67beaf747343405c8facf999bc0c\"\u003e\u003ccode\u003e80c8742\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.161.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16597\"\u003e#16597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b105209dbf32d1e25ff7357ab706490dcafc9c44\"\u003e\u003ccode\u003eb105209\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e42ac0a13459086f42d96eab13748303bcfa78e7\"\u003e\u003ccode\u003ee42ac0a\u003c/code\u003e\u003c/a\u003e ✨ Add support for combining unions of form models (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16596\"\u003e#16596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/addd0778e996cf886972b8024113d79f8d0a3580\"\u003e\u003ccode\u003eaddd077\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.160.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16595\"\u003e#16595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/352a4edff3f4362f28c42da29e0879846f6f637e\"\u003e\u003ccode\u003e352a4ed\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/91a335ce946c7a832da973f2acf69b8876594216\"\u003e\u003ccode\u003e91a335c\u003c/code\u003e\u003c/a\u003e 🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16594\"\u003e#16594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ce6ee83e5411b98582e996e47edf7870418a68f4\"\u003e\u003ccode\u003ece6ee83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.142.2...0.161.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fonttools` from 4.66.1 to 4.67.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fonttools/fonttools/releases\"\u003efonttools's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.67.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[varLib] Support decreasing design-space axis mappings, via a new keyword-only \u003ccode\u003eallow_decreasing\u003c/code\u003e argument to \u003ccode\u003emodels.normalizeValue\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3970\"\u003e#3970\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4217\"\u003e#4217\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4243\"\u003e#4243\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[designspaceLib] Allow partial DesignSpace v5 axis subsets: omitted range attributes on an \u003ccode\u003e\u0026lt;axis-subset\u0026gt;\u003c/code\u003e are taken from the parent axis, as the spec says (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[designspaceLib] Fix \u003ccode\u003eDesignSpaceDocument.normalize()\u003c/code\u003e for mapped axes: axis bounds and rule conditions are now normalized from their original values (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4218\"\u003e#4218\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[designspaceLib] \u003ccode\u003esplitInterpolable\u003c/code\u003e and \u003ccode\u003esplitVariableFonts\u003c/code\u003e now warn when a source or instance is dropped because it lies outside the document's own axes, instead of silently discarding it (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4244\"\u003e#4244\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Add support for instancing variable COLRv1 fonts (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/2699\"\u003e#2699\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4279\"\u003e#4279\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Apply VVAR vertical-origin deltas to \u003ccode\u003eVORG\u003c/code\u003e, and use OpenType rounding for instanced advances and vertical origins (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4221\"\u003e#4221\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Keep a universal FeatureVariations record when pinning removes its last condition but other axes remain (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4247\"\u003e#4247\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Preserve ppem \u003ccode\u003eDevice\u003c/code\u003e corrections in GDEF, BASE, GPOS and JSTF instead of asserting on them (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4290\"\u003e#4290\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Allow requesting an axis's original range on VARC fonts (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4280\"\u003e#4280\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer, subset] Fold, remove or remap MATH \u003ccode\u003eVariationIndex\u003c/code\u003e devices when instancing, subsetting the GDEF store or optimizing it (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4288\"\u003e#4288\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib] Raise \u003ccode\u003eValueError: Missing required table fvar\u003c/code\u003e from \u003ccode\u003evarLib.mutator\u003c/code\u003e and the instancer CLI on a static font, instead of a bare \u003ccode\u003eKeyError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3751\"\u003e#3751\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4300\"\u003e#4300\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[featureVars] When adding \u003ccode\u003ervrn\u003c/code\u003e, also shift lookup indices inside existing FeatureVariations (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4233\"\u003e#4233\u003c/a\u003e). Handle null \u003ccode\u003eConditionSet\u003c/code\u003e and \u003ccode\u003eFeatureTableSubstitution\u003c/code\u003e offsets when building, subsetting and instancing (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4234\"\u003e#4234\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4235\"\u003e#4235\u003c/a\u003e). Keep \u003ccode\u003eFeatureTableSubstitution\u003c/code\u003e records sorted after merging new ones into an existing record (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4248\"\u003e#4248\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[ttLib] Fix FeatureParams (\u003ccode\u003esize\u003c/code\u003e, \u003ccode\u003essXX\u003c/code\u003e, \u003ccode\u003ecvXX\u003c/code\u003e) in FeatureVariations alternate feature tables, which failed to compile and round-trip (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3623\"\u003e#3623\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4278\"\u003e#4278\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[ttLib] Fully decode lazily loaded ligatures, \u003ccode\u003eSinglePos\u003c/code\u003e and \u003ccode\u003ePairPos\u003c/code\u003e arrays during recursive decompilation, so \u003ccode\u003ereorderGlyphs()\u003c/code\u003e on a lazy font no longer corrupts or asserts on them (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4231\"\u003e#4231\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4232\"\u003e#4232\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[VARC] Update the variation-store binary format to follow \u003ca href=\"https://redirect.github.com/harfbuzz/boring-expansion-spec/issues/175\"\u003eharfbuzz/boring-expansion-spec#175\u003c/a\u003e: \u003ccode\u003eSparseVarRegionList.RegionCount\u003c/code\u003e is uint32, sparse axes use Offset32 and \u003ccode\u003eMultiVarData\u003c/code\u003e items are stored in an INDEX. VARC fonts built with earlier fontTools versions must be rebuilt (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4219\"\u003e#4219\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[VARC] Several fixes: derive component conditions from \u003ccode\u003econditionIndex\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4237\"\u003e#4237\u003c/a\u003e), set the implicit \u003ccode\u003escaleY\u003c/code\u003e when importing XML (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4238\"\u003e#4238\u003c/a\u003e), report the font's current coordinates for components that reset unspecified axes (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4239\"\u003e#4239\u003c/a\u003e), and keep inherited coordinates when drawing CFF2 VARC components (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4236\"\u003e#4236\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib] \u003ccode\u003ebuildMultiVarData\u003c/code\u003e accepts flattened per-region vector tuples (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4245\"\u003e#4245\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[otConverters] Bounds-check CFF2 INDEX count and \u003ccode\u003eoffSize\u003c/code\u003e on read, raising \u003ccode\u003eTTLibError\u003c/code\u003e instead of allocating huge lazy lists (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4220\"\u003e#4220\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[ttLib] Handle empty packed deltas when \u003ccode\u003eOPTIMIZE_FONT_SPEED\u003c/code\u003e is set (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4241\"\u003e#4241\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[scaleUpem] Scale per-glyph \u003ccode\u003eVORG\u003c/code\u003e origins (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4222\"\u003e#4222\u003c/a\u003e); fix VARC scaling for static fonts and condition variations (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4223\"\u003e#4223\u003c/a\u003e); don't mutate the shared default CFF \u003ccode\u003eFontMatrix\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4251\"\u003e#4251\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4252\"\u003e#4252\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[cmap] Fix format 2 compilation when all codes are single-byte (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/1524\"\u003e#1524\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4211\"\u003e#4211\u003c/a\u003e) or all single-byte codes map to \u003ccode\u003e.notdef\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4215\"\u003e#4215\u003c/a\u003e). Formats 2 and 4 now reject glyph IDs above 65535 instead of wrapping them (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4226\"\u003e#4226\u003c/a\u003e). Split format 14 default UVS ranges longer than 256 codepoints (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4229\"\u003e#4229\u003c/a\u003e). Empty format 12 and 13 subtables round-trip (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4246\"\u003e#4246\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[glyf] Use unsigned instruction lengths, so programs of 32768-65535 bytes compile and decompile correctly (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4227\"\u003e#4227\u003c/a\u003e). Keep instructions in zero-contour glyphs (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4228\"\u003e#4228\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[pens] Fix cubic off-curve detection in \u003ccode\u003eTTGlyphPointPen\u003c/code\u003e across contour starts (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4224\"\u003e#4224\u003c/a\u003e). \u003ccode\u003eGlyph.drawPoints()\u003c/code\u003e now raises \u003ccode\u003eNotImplementedError\u003c/code\u003e for an all-off-curve cubic contour, which the point pen protocol cannot express (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3191\"\u003e#3191\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4225\"\u003e#4225\u003c/a\u003e). \u003ccode\u003eRoundingPen\u003c/code\u003e passes the all-off-curve \u003ccode\u003eNone\u003c/code\u003e sentinel through (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4311\"\u003e#4311\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4312\"\u003e#4312\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[CFF2] Preserve operands when a blend has zero regions (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4240\"\u003e#4240\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[cffLib] Read CFF font names as Latin-1, matching how they are written (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4253\"\u003e#4253\u003c/a\u003e). Deleting a CFF dict attribute now actually removes it (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/2725\"\u003e#2725\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4264\"\u003e#4264\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[CFF2ToCFF] Fix conversion of fonts with local subroutines (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4258\"\u003e#4258\u003c/a\u003e). A CFF2 table with a single FontDict is now converted to a name-keyed CFF font that keeps its glyph names (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3890\"\u003e#3890\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4265\"\u003e#4265\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[subset] Handle a null GDEF variation store (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4230\"\u003e#4230\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[merge] Support merging fonts that both have a MATH table (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3823\"\u003e#3823\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4257\"\u003e#4257\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[feaLib] Reject the same mark class used twice in one anchor list (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3628\"\u003e#3628\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4255\"\u003e#4255\u003c/a\u003e). Don't crash on value records whose devices are all NULL (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/2396\"\u003e#2396\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4261\"\u003e#4261\u003c/a\u003e). Pad a short OS/2 \u003ccode\u003eVendor\u003c/code\u003e with spaces (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4259\"\u003e#4259\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[feaLib] Raise \u003ccode\u003eFeatureLibError\u003c/code\u003e with a location, instead of a bare Python error, for: a BASE script list without a matching tag list (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4263\"\u003e#4263\u003c/a\u003e), a \u003ccode\u003eUnicodeRange\u003c/code\u003e bit outside 0-127 (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4266\"\u003e#4266\u003c/a\u003e), a name string that cannot be decoded (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4267\"\u003e#4267\u003c/a\u003e), a STAT axis \u003ccode\u003elocation\u003c/code\u003e with no or too many values (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4268\"\u003e#4268\u003c/a\u003e), and a non-ASCII OS/2 \u003ccode\u003eVendor\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4269\"\u003e#4269\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[name] Fix the BCP 47 tags of some Mac and Windows language IDs, e.g. \u003ccode\u003ees\u003c/code\u003e was mapped to Mac Estonian (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3733\"\u003e#3733\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4256\"\u003e#4256\u003c/a\u003e). \u003ccode\u003egetDebugName\u003c/code\u003e prefers the Windows English name over the Mac one (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3969\"\u003e#3969\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4273\"\u003e#4273\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[post] Don't crash on a format 2.0 table with \u003ccode\u003enumGlyphs\u003c/code\u003e set to 0 (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3060\"\u003e#3060\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4274\"\u003e#4274\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[VDMX] Recompute \u003ccode\u003enumRecs\u003c/code\u003e and \u003ccode\u003enumRatios\u003c/code\u003e when compiling (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4293\"\u003e#4293\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[Silf] Fix compiling a \u003ccode\u003eSilf\u003c/code\u003e table that was decompiled from binary (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4294\"\u003e#4294\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[woff2] Preserve \u003ccode\u003eminorVersion\u003c/code\u003e when copying flavor data (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4249\"\u003e#4249\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4250\"\u003e#4250\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[ttGlyphSet] Compute glyph width lazily for glyf variable fonts without HVAR, so \u003ccode\u003e.width\u003c/code\u003e is correct before drawing (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3964\"\u003e#3964\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4260\"\u003e#4260\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.interpolatable] Respect designspace source layers (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3951\"\u003e#3951\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4275\"\u003e#4275\u003c/a\u003e); fix \u003ccode\u003e--json\u003c/code\u003e output with SciPy (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3870\"\u003e#3870\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4276\"\u003e#4276\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[misc.psLib] Fix tokenizing of escaped parentheses in PostScript strings (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4207\"\u003e#4207\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[svgLib] Raise \u003ccode\u003eValueError\u003c/code\u003e instead of \u003ccode\u003eIndexError\u003c/code\u003e on a truncated path command (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4254\"\u003e#4254\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[misc.transform] Preserve the direction of the remaining axis when decomposing a transform whose first column is zero (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4242\"\u003e#4242\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[misc.textTools] \u003ccode\u003eTag.__ne__\u003c/code\u003e returns \u003ccode\u003eNotImplemented\u003c/code\u003e for unsupported types (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4305\"\u003e#4305\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4306\"\u003e#4306\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[misc.dictTools] \u003ccode\u003ehashdict\u003c/code\u003e rejects in-place union (\u003ccode\u003e|=\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4313\"\u003e#4313\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4314\"\u003e#4314\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[misc.xmlReader] Close owned input streams when parsing fails (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4298\"\u003e#4298\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[misc.filesystem] \u003ccode\u003eWriteZipFS.close()\u003c/code\u003e can be called more than once (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4309\"\u003e#4309\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4310\"\u003e#4310\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[EBDT] Keep EBDT/CBDT glyph metrics after probing a missing attribute (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3806\"\u003e#3806\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4216\"\u003e#4216\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/fonttools/fonttools/blob/main/NEWS.rst\"\u003efonttools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.67.0 (released 2026-10-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[varLib] Support decreasing design-space axis mappings, via a new keyword-only\n\u003ccode\u003eallow_decreasing\u003c/code\u003e argument to \u003ccode\u003emodels.normalizeValue\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3970\"\u003e#3970\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4217\"\u003e#4217\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4243\"\u003e#4243\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[designspaceLib] Allow partial DesignSpace v5 axis subsets: omitted range attributes\non an \u003ccode\u003e\u0026lt;axis-subset\u0026gt;\u003c/code\u003e are taken from the parent axis, as the spec says (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[designspaceLib] Fix \u003ccode\u003eDesignSpaceDocument.normalize()\u003c/code\u003e for mapped axes: axis\nbounds and rule conditions are now normalized from their original values (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4218\"\u003e#4218\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[designspaceLib] \u003ccode\u003esplitInterpolable\u003c/code\u003e and \u003ccode\u003esplitVariableFonts\u003c/code\u003e now warn when a\nsource or instance is dropped because it lies outside the document's own axes,\ninstead of silently discarding it (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4244\"\u003e#4244\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Add support for instancing variable COLRv1 fonts (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/2699\"\u003e#2699\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4279\"\u003e#4279\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Apply VVAR vertical-origin deltas to \u003ccode\u003eVORG\u003c/code\u003e, and use OpenType\nrounding for instanced advances and vertical origins (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4221\"\u003e#4221\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Keep a universal FeatureVariations record when pinning removes\nits last condition but other axes remain (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4247\"\u003e#4247\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Preserve ppem \u003ccode\u003eDevice\u003c/code\u003e corrections in GDEF, BASE, GPOS and JSTF\ninstead of asserting on them (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4290\"\u003e#4290\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer] Allow requesting an axis's original range on VARC fonts (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4280\"\u003e#4280\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib.instancer, subset] Fold, remove or remap MATH \u003ccode\u003eVariationIndex\u003c/code\u003e devices\nwhen instancing, subsetting the GDEF store or optimizing it (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4288\"\u003e#4288\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib] Raise \u003ccode\u003eValueError: Missing required table fvar\u003c/code\u003e from \u003ccode\u003evarLib.mutator\u003c/code\u003e\nand the instancer CLI on a static font, instead of a bare \u003ccode\u003eKeyError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3751\"\u003e#3751\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4300\"\u003e#4300\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[featureVars] When adding \u003ccode\u003ervrn\u003c/code\u003e, also shift lookup indices inside existing\nFeatureVariations (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4233\"\u003e#4233\u003c/a\u003e). Handle null \u003ccode\u003eConditionSet\u003c/code\u003e and\n\u003ccode\u003eFeatureTableSubstitution\u003c/code\u003e offsets when building, subsetting and instancing\n(\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4234\"\u003e#4234\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4235\"\u003e#4235\u003c/a\u003e). Keep \u003ccode\u003eFeatureTableSubstitution\u003c/code\u003e records sorted after merging new\nones into an existing record (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4248\"\u003e#4248\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[ttLib] Fix FeatureParams (\u003ccode\u003esize\u003c/code\u003e, \u003ccode\u003essXX\u003c/code\u003e, \u003ccode\u003ecvXX\u003c/code\u003e) in FeatureVariations\nalternate feature tables, which failed to compile and round-trip (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/3623\"\u003e#3623\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4278\"\u003e#4278\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[ttLib] Fully decode lazily loaded ligatures, \u003ccode\u003eSinglePos\u003c/code\u003e and \u003ccode\u003ePairPos\u003c/code\u003e arrays\nduring recursive decompilation, so \u003ccode\u003ereorderGlyphs()\u003c/code\u003e on a lazy font no longer\ncorrupts or asserts on them (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4231\"\u003e#4231\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4232\"\u003e#4232\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[VARC] Update the variation-store binary format to follow\n\u003ca href=\"https://redirect.github.com/harfbuzz/boring-expansion-spec/issues/175\"\u003eharfbuzz/boring-expansion-spec#175\u003c/a\u003e: \u003ccode\u003eSparseVarRegionList.RegionCount\u003c/code\u003e is uint32,\nsparse axes use Offset32 and \u003ccode\u003eMultiVarData\u003c/code\u003e items are stored in an INDEX. VARC\nfonts built with earlier fontTools versions must be rebuilt (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4219\"\u003e#4219\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[VARC] Several fixes: derive component conditions from \u003ccode\u003econditionIndex\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4237\"\u003e#4237\u003c/a\u003e),\nset the implicit \u003ccode\u003escaleY\u003c/code\u003e when importing XML (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4238\"\u003e#4238\u003c/a\u003e), report the font's current\ncoordinates for components that reset unspecified axes (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4239\"\u003e#4239\u003c/a\u003e), and keep inherited\ncoordinates when drawing CFF2 VARC components (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4236\"\u003e#4236\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[varLib] \u003ccode\u003ebuildMultiVarData\u003c/code\u003e accepts flattened per-region vector tuples (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4245\"\u003e#4245\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[otConverters] Bounds-check CFF2 INDEX count and \u003ccode\u003eoffSize\u003c/code\u003e on read, raising\n\u003ccode\u003eTTLibError\u003c/code\u003e instead of allocating huge lazy lists (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4220\"\u003e#4220\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[ttLib] Handle empty packed deltas when \u003ccode\u003eOPTIMIZE_FONT_SPEED\u003c/code\u003e is set (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4241\"\u003e#4241\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[scaleUpem] Scale per-glyph \u003ccode\u003eVORG\u003c/code\u003e origins (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4222\"\u003e#4222\u003c/a\u003e); fix VARC scaling for static\nfonts and condition variations (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4223\"\u003e#4223\u003c/a\u003e); don't mutate the shared default CFF\n\u003ccode\u003eFontMatrix\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4251\"\u003e#4251\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4252\"\u003e#4252\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e[cmap] Fix format 2 compilation when all codes are single-byte (\u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/1524\"\u003e#1524\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4211\"\u003e#4211\u003c/a\u003e) or\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/16f88cb09446ab617a1a788e48ae12e0f0ec5217\"\u003e\u003ccode\u003e16f88cb\u003c/code\u003e\u003c/a\u003e Release 4.67.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/5049c83959de649b5cda2a4b7d1da3cc3436079b\"\u003e\u003ccode\u003e5049c83\u003c/code\u003e\u003c/a\u003e Update NEWS.rst [skip ci]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/fdfd15f959c2a263163e13db917b58c9e4844548\"\u003e\u003ccode\u003efdfd15f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4314\"\u003e#4314\u003c/a\u003e from xiehuanyi/fix/hashdict-inplace-union-20261014\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/87ee7d321f456039fe7ae7d9b9a87b164c051e21\"\u003e\u003ccode\u003e87ee7d3\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4312\"\u003e#4312\u003c/a\u003e from xiehuanyi/fix/roundingpen-offcurve-none-20261014\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/e6e65d3748f8af2a9e3685c0cae915d9f20112c4\"\u003e\u003ccode\u003ee6e65d3\u003c/code\u003e\u003c/a\u003e [dictTools] Reject in-place union on hashdict\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/10cfefe61a82824662296f447bec1f8503a313d6\"\u003e\u003ccode\u003e10cfefe\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4310\"\u003e#4310\u003c/a\u003e from xiehuanyi/fix/writezipfs-idempotent-close-20261014\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/06157e4d91539f7bac16aaa306fc53ca61b9792b\"\u003e\u003ccode\u003e06157e4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4300\"\u003e#4300\u003c/a\u003e from CAOShurong/codex/3751-missing-fvar\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/2940a2e5260489a7fd9045cf2cfc329b1db151d3\"\u003e\u003ccode\u003e2940a2e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4298\"\u003e#4298\u003c/a\u003e from xiehuanyi/fix-xml-reader-failure-cleanup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/821805d066d548b32334841fcc0de5f5c8b24b5b\"\u003e\u003ccode\u003e821805d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/fonttools/fonttools/issues/4306\"\u003e#4306\u003c/a\u003e from xiehuanyi/fix/tag-notimplemented-comparison-202...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fonttools/fonttools/commit/85538d641a2babe23e31b37b2aa32d0a271ec2b0\"\u003e\u003ccode\u003e85538d6\u003c/code\u003e\u003c/a\u003e [roundingPen] Preserve all-off-curve quadratic sentinel\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fonttools/fonttools/compare/4.66.1...4.67.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `granian` from 2.8.4 to 2.8.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/emmett-framework/granian/releases\"\u003egranian's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eGranian 2.8.5\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePatch release\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eChanges since 2.8.4:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRefactor static files path pattern matching on Windows\u003c/li\u003e\n\u003cli\u003eFix a shadowing bug in static files url routing\u003c/li\u003e\n\u003cli\u003eUpdate backlog parameter documentation (\u003ca href=\"https://redirect.github.com/emmett-framework/granian/issues/936\"\u003e#936\u003c/a\u003e by \u003ca href=\"https://github.com/RealOrangeOne\"\u003e\u003ccode\u003e@​RealOrangeOne\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix IPv6 client address formatting in access log (\u003ca href=\"https://redirect.github.com/emmett-framework/granian/issues/933\"\u003e#933\u003c/a\u003e by \u003ca href=\"https://github.com/NotAFlightRisk\"\u003e\u003ccode\u003e@​NotAFlightRisk\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix a bug in workers kill timeout budget math (\u003ca href=\"https://redirect.github.com/emmett-framework/granian/issues/939\"\u003e#939\u003c/a\u003e by \u003ca href=\"https://github.com/Shaisolaris\"\u003e\u003ccode\u003e@​Shaisolaris\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix asyncio event loop cleanup in threaded workers (\u003ca href=\"https://redirect.github.com/emmett-framework/granian/issues/940\"\u003e#940\u003c/a\u003e by \u003ca href=\"https://github.com/Shaisolaris\"\u003e\u003ccode\u003e@​Shaisolaris\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix mimalloc CFLAGS on MacOS wheels\u003c/li\u003e\n\u003cli\u003eBump dependencies\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/59cbc26734634c9e9089180f3fd4469adde214de\"\u003e\u003ccode\u003e59cbc26\u003c/code\u003e\u003c/a\u003e Close the loop on threaded workers shutdown (\u003ca href=\"https://redirect.github.com/emmett-framework/granian/issues/940\"\u003e#940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/5116380582a9a57d5a3f877992614a2d0fbd3c9b\"\u003e\u003ccode\u003e5116380\u003c/code\u003e\u003c/a\u003e Refactor static file path checker in win, fix a shadowing issue\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/3a11d2604240587efbc32702f8f8db9a0c54cdba\"\u003e\u003ccode\u003e3a11d26\u003c/code\u003e\u003c/a\u003e Bump PyO3 to 0.30\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/438950fff1df9d0e2ee0f236e5a05b8b566c4303\"\u003e\u003ccode\u003e438950f\u003c/code\u003e\u003c/a\u003e Keep the worker kill budget from shrinking twice (\u003ca href=\"https://redirect.github.com/emmett-framework/granian/issues/939\"\u003e#939\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/c497384fb2d0765a1b5c086ea6ac9539c9698a3f\"\u003e\u003ccode\u003ec497384\u003c/code\u003e\u003c/a\u003e Fix CFLAGS for mimalloc builds on MacOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/a7483f440076b37886517bc67d8fac8d9a653296\"\u003e\u003ccode\u003ea7483f4\u003c/code\u003e\u003c/a\u003e Bump dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/50e6fbf2cf926d7956bb716796cd9ecc33ef7d31\"\u003e\u003ccode\u003e50e6fbf\u003c/code\u003e\u003c/a\u003e Use bash shell on Windows in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/d8a50159eeb797e7f73d7885824808f51024c877\"\u003e\u003ccode\u003ed8a5015\u003c/code\u003e\u003c/a\u003e Fix IPv6 client addresses in WSGI access log (\u003ca href=\"https://redirect.github.com/emmett-framework/granian/issues/933\"\u003e#933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/78e43a8a416e3f28e643ca245fd8b32ff9b8cc9d\"\u003e\u003ccode\u003e78e43a8\u003c/code\u003e\u003c/a\u003e Update backlog help text to reference that it's per worker for TCP sockets (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emmett-framework/granian/commit/4213f91589270d5657979512310ef71b129bccac\"\u003e\u003ccode\u003e4213f91\u003c/code\u003e\u003c/a\u003e Bump version to 2.8.5\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/emmett-framework/granian/compare/v2.8.4...v2.8.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `numpy` from 2.5.3 to 2.5.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/releases\"\u003enumpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.5.4 (Oct 10,  2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.5.4 Release Notes\u003c/h1\u003e\n\u003cp\u003e\u003cem\u003eReleased on 2026-10-10.\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eNumPy 2.5.4 is a patch release that fixes bugs discovered after the 2.5.3\nrelease. Highlights are:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMany typing fixes and improvements,\u003c/li\u003e\n\u003cli\u003eA workaround for the MSVC 19.51 bug, see below.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThis release supports Python versions 3.12-3.15.\u003c/p\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003enumpy.linalg.svd\u003c/code\u003e and \u003ccode\u003enumpy.linalg.lstsq\u003c/code\u003e now raise for inputs containing\ninfinities instead of returning garbage results.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed hangs in \u003ccode\u003enumpy.linalg.svd\u003c/code\u003e and \u003ccode\u003enumpy.linalg.lstsq\u003c/code\u003e for certain inputs\ncontaining infinities for recent versions of some LAPACK implementations.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003enumpy.linalg.cond\u003c/code\u003e now handles non-finite inputs more consistently.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32593\"\u003egh-32593\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eStringDType hashing with NaN sentinels\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eStringDType\u003c/code\u003e instances with equivalent floating-point NaN sentinels now\nhave equal hashes. Previously, distinct NaN objects could produce equal\ndtype instances with different hashes, causing dictionary lookups and set\ndeduplication to fail.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32563\"\u003egh-32563\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003ch3\u003e\u003ccode\u003eMaskedArray\u003c/code\u003e resets a fill_value that cannot be represented in a new dtype\u003c/h3\u003e\n\u003cp\u003eA fill_value copied from a source array is now reset to the default fill_value\nfor the new dtype when it cannot be represented in that dtype. Previously the\ncopied value could be stale: ufuncs that change dtype left the result holding a\nfill_value typed for the old dtype, which raised a \u003ccode\u003eTypeError\u003c/code\u003e only when\nsomething later validated it (such as \u003ccode\u003e.view()\u003c/code\u003e), and a floating point\nfill_value that overflows an integer dtype was kept as an out-of-range value\ntogether with a \u003ccode\u003eRuntimeWarning\u003c/code\u003e. Both now fall back to the default,\nincluding when a masked array is passed to \u003ccode\u003eMaskedArray\u003c/code\u003e with a different\n\u003ccode\u003edtype\u003c/code\u003e. A fill_value given explicitly by the user is still validated and\nraises as before. This can now raise a \u003ccode\u003eComplexWarning\u003c/code\u003e if the fill_value is\ncomplex and the new dtype is real.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/a3d0ef1df045b858e68115001fdabc930bb3b68c\"\u003e\u003ccode\u003ea3d0ef1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32969\"\u003e#32969\u003c/a\u003e from charris/prepare-2.5.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/087b5367c84b5296c32c26c415438d87d3888586\"\u003e\u003ccode\u003e087b536\u003c/code\u003e\u003c/a\u003e MAINT: Make OpenBLAS version check use 2.5.x branch.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/91acd879242a679604579895d490c26f864a4b03\"\u003e\u003ccode\u003e91acd87\u003c/code\u003e\u003c/a\u003e REL: Prepare for the NumPy 2.5.4 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/9cc555bae07244551829c3a4eb7a635bef6345b3\"\u003e\u003ccode\u003e9cc555b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32956\"\u003e#32956\u003c/a\u003e from charris/backport-typing-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/e04b972a306136b8ac9219be199948badafa3475\"\u003e\u003ccode\u003ee04b972\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003edtype[void].names\u003c/code\u003e: allow setting with list (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32943\"\u003e#32943\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/d9299693d20c3fd1aa83b9464d074632cf59aaac\"\u003e\u003ccode\u003ed929969\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003etimedelta64\u003c/code\u003e: \u003ccode\u003edatetime.timedelta\u003c/code\u003e construction isn't deprecated (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/839467fdbcc1d68b68f4fe2a61d3387107c78394\"\u003e\u003ccode\u003e839467f\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003ema.getmaskarray\u003c/code\u003e: accept array-likes (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32934\"\u003e#32934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/64b721b23f51543ed9316a5fd21a48734760b429\"\u003e\u003ccode\u003e64b721b\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003epolynomial\u003c/code\u003e: accept scalar \u003ccode\u003ecoef\u003c/code\u003e in the poly constructors (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32931\"\u003e#32931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/06b7ad226e41b71919b2d35c50063998eced0b9d\"\u003e\u003ccode\u003e06b7ad2\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003evoid\u003c/code\u003e: accept any \u003ccode\u003edtype: str\u003c/code\u003e in constructor calls (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32928\"\u003e#32928\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/c7bcd2c0aaca732b87575829cc61508076de1af5\"\u003e\u003ccode\u003ec7bcd2c\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003eplace\u003c/code\u003e: widen \u003ccode\u003emask\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32926\"\u003e#32926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/numpy/numpy/compare/v2.5.3...v2.5.4\"\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.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...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-settings` from 2.15.0 to 2.16.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.16.1\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThis patch release fixes two CLI regressions introduced in 2.16.0.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed-length tuple positionals such as \u003ccode\u003eCliPositionalArg[tuple[int, int]]\u003c/code\u003e and \u003ccode\u003eNamedTuple\u003c/code\u003es are single-valued again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1069\"\u003e#1069\u003c/a\u003e). Since 2.16.0 they were treated as variadic, so a CLI either refused to start with a \u003ccode\u003eSettingsError\u003c/code\u003e or put the wrong argument into the tuple. Variable-length tuples (\u003ccode\u003etuple[int, ...]\u003c/code\u003e and bare \u003ccode\u003eTuple\u003c/code\u003e) are still variadic.\u003c/li\u003e\n\u003cli\u003eA field typed as an alias of a list of dicts, e.g. \u003ccode\u003etype ListOfDict = list[dict[str, int]]\u003c/code\u003e, accepts a JSON list again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1049\"\u003e#1049\u003c/a\u003e). Since 2.16.0, \u003ccode\u003e--xx '[{\u0026quot;a\u0026quot;:1},{\u0026quot;b\u0026quot;:2}]'\u003c/code\u003e was merged into the single dict \u003ccode\u003e{\u0026quot;a\u0026quot;: 1, \u0026quot;b\u0026quot;: 2}\u003c/code\u003e and failed validation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden CI by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1044\"\u003epydantic/pydantic-settings#1044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep list of dicts CLI values as lists 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/1049\"\u003epydantic/pydantic-settings#1049\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep fixed-length tuple CLI positionals single-valued 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/1069\"\u003epydantic/pydantic-settings#1069\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.16.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/1087\"\u003epydantic/pydantic-settings#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1056\"\u003epydantic/pydantic-settings#1056\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.16.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBreaking changes and behavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.10 is no longer supported\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1003\"\u003e#1003\u003c/a\u003e). pydantic-settings now requires Python 3.11+, since 3.10 reaches end of life this month. The \u003ccode\u003etomli\u003c/code\u003e fallback is gone in favor of stdlib \u003ccode\u003etomllib\u003c/code\u003e; the \u003ccode\u003etoml\u003c/code\u003e extra is kept as an empty extra so \u003ccode\u003epip install pydantic-settings[toml]\u003c/code\u003e keeps working.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003epython-dotenv\u0026gt;=1.2.2\u003c/code\u003e is now required\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/971\"\u003e#971\u003c/a\u003e) to pick up the fix for CVE-2026-28684.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAliases are ignored in every source when \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1033\"\u003e#1033\u003c/a\u003e). Env vars, secrets, CLI flags and defaults now use only field names, matching pydantic. An env var named after the alias is now ignored instead of raising \u003ccode\u003eextra_forbidden\u003c/code\u003e, and the CLI exposes \u003ccode\u003e--apple\u003c/code\u003e rather than \u003ccode\u003e--pomo\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003evalidation_alias\u003c/code\u003e takes precedence over \u003ccode\u003ealias\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1038\"\u003e#1038\u003c/a\u003e). When the two differ, values from JSON/YAML/TOML files and the CLI were silently ignored; they now load. CLI help lists the \u003ccode\u003evalidation_alias\u003c/code\u003e flag first, and \u003ccode\u003eCliApp.serialize\u003c/code\u003e emits it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCLI case-insensitivity only lowercases registered options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1036\"\u003e#1036\u003c/a\u003e). With \u003ccode\u003ecase_sensitive=False\u003c/code\u003e, args after \u003ccode\u003e--\u003c/code\u003e and those captured by \u003ccode\u003eCliUnknownArgs\u003c/code\u003e keep their case (\u003ccode\u003e-Xmx4G\u003c/code\u003e no longer becomes \u003ccode\u003e-xmx4g\u003c/code\u003e). Unrecognized options are now reported as typed (\u003ccode\u003e--NOPE\u003c/code\u003e instead of \u003ccode\u003e--nope\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eJSON and YAML config files are read as UTF-8 by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/955\"\u003e#955\u003c/a\u003e) instead of the locale encoding, completing the secrets-file fix from 2.15.0. \u003ccode\u003ejson_file_encoding\u003c/code\u003e/\u003ccode\u003eyaml_file_encoding\u003c/code\u003e still override it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDiscriminated union defaults are partially updated again\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/997\"\u003e#997\u003c/a\u003e). This reverts the 2.15.0 regression with \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e: the default is only dropped when the incoming value selects a \u003cem\u003edifferent\u003c/em\u003e union member.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.15 and pydantic 2.14 support\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1026\"\u003e#1026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1029\"\u003e#1029\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1022\"\u003e#1022\u003c/a\u003e). pydantic 2.14 broke \u003ccode\u003eCliApp.run\u003c/code\u003e and \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e handling; both are fixed.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCached settings instances\u003c/strong\u003e via \u003ccode\u003eSettings.settings_cached()\u003c/code\u003e and \u003ccode\u003eSettings.settings_clear_cache()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/952\"\u003e#952\u003c/a\u003e). These give you a process-local singleton per settings class without hand-rolling \u003ccode\u003elru_cache\u003c/code\u003e wrappers. Calling the class directly still builds a fresh instance.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAWS Systems Manager Parameter Store source\u003c/strong\u003e — \u003ccode\u003eAWSSystemsManagerSettingsSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/941\"\u003e#941\u003c/a\u003e). It recursively reads every parameter under an \u003ccode\u003essm_path\u003c/code\u003e, with \u003ccode\u003e/\u003c/code\u003e mapping onto nested models. Install it with the new \u003ccode\u003eaws-systems-manager\u003c/code\u003e extra.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenv_file_depth\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/940\"\u003e#940\u003c/a\u003e) lets a relative \u003ccode\u003eenv_file\u003c/code\u003e be found in parent directories, mirroring \u003ccode\u003epyproject_toml_depth\u003c/code\u003e. This is useful when scripts run from a subdirectory of a monorepo. It defaults to \u003ccode\u003e0\u003c/code\u003e, which keeps the current behavior.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eCliVariadicArg\u003c/code\u003e for named variadic options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/949\"\u003e#949\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/958\"\u003e#958\u003c/a\u003e). It accepts \u003ccode\u003e--param a b c\u003c/code\u003e in addition to repeated \u003ccode\u003e--param a --param b\u003c/code\u003e. Required fields need at least one value.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4e286e284fe43f0fb86872b91f708d3dd5356bfc\"\u003e\u003ccode\u003e4e286e2\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1087\"\u003e#1087\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/993b59e1682799d5ad33b721b7158718b6278944\"\u003e\u003ccode\u003e993b59e\u003c/code\u003e\u003c/a\u003e Keep fixed-length tuple CLI positionals single-valued (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1069\"\u003e#1069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f651a7a57a0e3b26147da02f2fda2d05f8c34cce\"\u003e\u003ccode\u003ef651a7a\u003c/code\u003e\u003c/a\u003e Keep list of dicts CLI values as lists (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1049\"\u003e#1049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ecf7d90bf1b1b71f2875f607c1668c44f576bf9c\"\u003e\u003ccode\u003eecf7d90\u003c/code\u003e\u003c/a\u003e Harden CI (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1044\"\u003e#1044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8c259f41b49b4cefbe4fb676d3c1f52dddd3cca8\"\u003e\u003ccode\u003e8c259f4\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1043\"\u003e#1043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4bc667ada383aca4df00304cd171f327a9fae163\"\u003e\u003ccode\u003e4bc667a\u003c/code\u003e\u003c/a\u003e Keep case of non-option CLI args when case_sensitive=False (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f75a8057a5fafe4aef3a042c2adf367c6987f73f\"\u003e\u003ccode\u003ef75a805\u003c/code\u003e\u003c/a\u003e Simplify alias resolution branch and test alias with AliasChoices/AliasPath (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/cfdc5585e821e84905905027de68a0188213537a\"\u003e\u003ccode\u003ecfdc558\u003c/code\u003e\u003c/a\u003e Honor env_parse_none_str for GCP Secret Manager (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1040\"\u003e#1040\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/081d39f9c73f46e68bc2bef75a23f7d84ed0c377\"\u003e\u003ccode\u003e081d39f\u003c/code\u003e\u003c/a\u003e Fix config file and CLI values being ignored when alias differs from validati...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c46ebc4cc599c09f3692f4d2e82a8f0bb5433f3a\"\u003e\u003ccode\u003ec46ebc4\u003c/code\u003e\u003c/a\u003e Expand home paths when checking TOML table headers (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.15.0...v2.16.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opendal` from 0.47.10 to 0.47.12\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/apache/opendal/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asyncpg` from 0.31.0 to 0.32.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/MagicStack/asyncpg/re...\n\n_Description has been truncated_","html_url":"https://github.com/Team-Haruki/Haruki-Drawing-API/pull/181","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Team-Haruki%2FHaruki-Drawing-API/issues/181","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/181/packages"}},{"old_version":"2.13.5","new_version":"2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-25T21:56:05.000Z","version_change":"2.13.5 → 2.14.1","issue":{"uuid":"6029797822","node_id":"PR_kwDORlbIXc8AAAABKpDfig","number":411,"state":"closed","title":"build(deps): Bump the production-minor-and-patch group across 1 directory with 19 updates","user":"dependabot[bot]","labels":["backend","dependencies"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-10-25T22:16:57.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-25T21:56:05.000Z","updated_at":"2026-10-25T22:17:01.000Z","time_to_close":1252,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): Bump","group_name":"production-minor-and-patch","update_count":19,"packages":[{"name":"fastapi","old_version":"0.142.2","new_version":"0.161.0","repository_url":"https://github.com/fastapi/fastapi"},{"name":"google-genai","old_version":"2.27.0","new_version":"2.32.0","repository_url":"https://github.com/googleapis/python-genai"},{"name":"pydantic","old_version":"2.13.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.15.0","new_version":"2.16.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"langchain","old_version":"1.4.3","new_version":"1.4.7","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-openai","old_version":"1.6.7","new_version":"1.7.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-google-genai","old_version":"4.4.0","new_version":"4.4.2","repository_url":"https://github.com/langchain-ai/langchain-google"},{"name":"langchain-anthropic","old_version":"1.7.5","new_version":"1.7.6","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"boto3","old_version":"1.43.107","new_version":"1.43.118","repository_url":"https://github.com/boto/boto3"},{"name":"sqlmodel","old_version":"0.0.47","new_version":"0.0.48","repository_url":"https://github.com/fastapi/sqlmodel"},{"name":"alembic","old_version":"1.20.0","new_version":"1.20.1","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"sentry-sdk","old_version":"2.71.0","new_version":"2.73.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"dlt","old_version":"1.30.0","new_version":"1.31.0","repository_url":"https://github.com/dlt-hub/dlt"},{"name":"selectolax","old_version":"1.0.0","new_version":"1.0.2","repository_url":"https://github.com/rushter/selectolax"},{"name":"trafilatura","old_version":"2.2.0","new_version":"2.3.1","repository_url":"https://github.com/adbar/trafilatura"},{"name":"headroom-ai","old_version":"0.39.1","new_version":"0.41.0","repository_url":"https://github.com/headroomlabs-ai/headroom"},{"name":"deepagents","old_version":"0.7.23","new_version":"0.7.30","repository_url":"https://github.com/langchain-ai/deepagents"},{"name":"reportlab","old_version":"5.0.1","new_version":"5.1.0"},{"name":"cloudflare","old_version":"5.8.0","new_version":"5.9.0","repository_url":"https://github.com/cloudflare/cloudflare-python"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-minor-and-patch group with 19 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.142.2` | `0.161.0` |\n| [google-genai](https://github.com/googleapis/python-genai) | `2.27.0` | `2.32.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.5` | `2.14.1` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.15.0` | `2.16.1` |\n| [langchain](https://github.com/langchain-ai/langchain) | `1.4.3` | `1.4.7` |\n| [langchain-openai](https://github.com/langchain-ai/langchain) | `1.6.7` | `1.7.2` |\n| [langchain-google-genai](https://github.com/langchain-ai/langchain-google) | `4.4.0` | `4.4.2` |\n| [langchain-anthropic](https://github.com/langchain-ai/langchain) | `1.7.5` | `1.7.6` |\n| [boto3](https://github.com/boto/boto3) | `1.43.107` | `1.43.118` |\n| [sqlmodel](https://github.com/fastapi/sqlmodel) | `0.0.47` | `0.0.48` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.20.0` | `1.20.1` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.71.0` | `2.73.0` |\n| [dlt](https://github.com/dlt-hub/dlt) | `1.30.0` | `1.31.0` |\n| [selectolax](https://github.com/rushter/selectolax) | `1.0.0` | `1.0.2` |\n| [trafilatura](https://github.com/adbar/trafilatura) | `2.2.0` | `2.3.1` |\n| [headroom-ai](https://github.com/headroomlabs-ai/headroom) | `0.39.1` | `0.41.0` |\n| [deepagents](https://github.com/langchain-ai/deepagents) | `0.7.23` | `0.7.30` |\n| [reportlab](https://www.reportlab.com/) | `5.0.1` | `5.1.0` |\n| [cloudflare](https://github.com/cloudflare/cloudflare-python) | `5.8.0` | `5.9.0` |\n\n\nUpdates `fastapi` from 0.142.2 to 0.161.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.161.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16596\"\u003e#16596\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.160.0\u003c/h2\u003e\n\u003cp\u003eQuery, header, cookie, and form parameter models now apply their \u003ccode\u003eextra\u003c/code\u003e configuration to all submitted fields in the same parameter location, consistent with Pydantic behavior. This includes fields declared in other models, individual parameters, or dependencies, which were previously excluded.\u003c/p\u003e\n\u003cp\u003eWith \u003ccode\u003eextra=\u0026quot;forbid\u0026quot;\u003c/code\u003e, fields outside the model are rejected even if another parameter declares them. With \u003ccode\u003eextra=\u0026quot;allow\u0026quot;\u003c/code\u003e, those fields are included as model extras. With the default \u003ccode\u003eextra=\u0026quot;ignore\u0026quot;\u003c/code\u003e, they are ignored.\u003c/p\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16594\"\u003e#16594\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump certifi from 2026.1.4 to 2026.10.19. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16571\"\u003e#16571\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.159.1\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16586\"\u003e#16586\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.159.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16584\"\u003e#16584\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.158.2\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16582\"\u003e#16582\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.158.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Preserve form media types in OpenAPI. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16579\"\u003e#16579\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.158.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16577\"\u003e#16577\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.157.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16573\"\u003e#16573\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\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/80c8742d141e67beaf747343405c8facf999bc0c\"\u003e\u003ccode\u003e80c8742\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.161.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16597\"\u003e#16597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b105209dbf32d1e25ff7357ab706490dcafc9c44\"\u003e\u003ccode\u003eb105209\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e42ac0a13459086f42d96eab13748303bcfa78e7\"\u003e\u003ccode\u003ee42ac0a\u003c/code\u003e\u003c/a\u003e ✨ Add support for combining unions of form models (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16596\"\u003e#16596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/addd0778e996cf886972b8024113d79f8d0a3580\"\u003e\u003ccode\u003eaddd077\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.160.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16595\"\u003e#16595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/352a4edff3f4362f28c42da29e0879846f6f637e\"\u003e\u003ccode\u003e352a4ed\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/91a335ce946c7a832da973f2acf69b8876594216\"\u003e\u003ccode\u003e91a335c\u003c/code\u003e\u003c/a\u003e 🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16594\"\u003e#16594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ce6ee83e5411b98582e996e47edf7870418a68f4\"\u003e\u003ccode\u003ece6ee83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/97858ed7df0d27d5cc3e6c648bd6f0f9cdf25b1f\"\u003e\u003ccode\u003e97858ed\u003c/code\u003e\u003c/a\u003e ⬆ Bump certifi from 2026.1.4 to 2026.10.19 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16571\"\u003e#16571\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4bdfbe4513084b19e22421ce1f916d8c1ac462a0\"\u003e\u003ccode\u003e4bdfbe4\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.159.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16588\"\u003e#16588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b169d23e7d65c99ce83e1cf5c6e76f3f585c6017\"\u003e\u003ccode\u003eb169d23\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.142.2...0.161.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-genai` from 2.27.0 to 2.32.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-genai/releases\"\u003egoogle-genai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.32.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.31.0...v2.32.0\"\u003e2.32.0\u003c/a\u003e (2026-10-21)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd base_voice to PromptedVoice in GAOS SDK (\u003ca href=\"https://github.com/googleapis/python-genai/commit/548864370ee9c88de0bd839b619dc05bcb7085e7\"\u003e5488643\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd generation_output_config to GenerateContentConfig (\u003ca href=\"https://github.com/googleapis/python-genai/commit/5c008e14b9c9fdecbaf61eb53ad7c09f57fa5f8a\"\u003e5c008e1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Live API in-session context updates (\u003ccode\u003esend_context_update\u003c/code\u003e) and types across GenAI SDKs. (\u003ca href=\"https://github.com/googleapis/python-genai/commit/364889aafe40bfa8f3b9db847ba272d299f7d632\"\u003e364889a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003esdks:\u003c/strong\u003e Enable \u003ccode\u003efixes.openSingleValueEnumsOct2026\u003c/code\u003e across all SDKs (\u003ca href=\"https://github.com/googleapis/python-genai/commit/78f6d3412caaaed44f99ce57be2d16d0b8c407cb\"\u003e78f6d34\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate discovery doc (\u003ca href=\"https://github.com/googleapis/python-genai/commit/6cd176e135a188bbb0d0f9afca520e7d6483823d\"\u003e6cd176e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBase64-encode inline bytes in Live send_tool_response (\u003ca href=\"https://github.com/googleapis/python-genai/commit/a7bbff6e73fa9444802cd9a17e8c94e30341bf5d\"\u003ea7bbff6\u003c/a\u003e), refs \u003ca href=\"https://redirect.github.com/googleapis/python-genai/issues/3022\"\u003e#3022\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash parsing responses with JSON objects in \u003ccode\u003eAny\u003c/code\u003e-typed fields (\u003ca href=\"https://github.com/googleapis/python-genai/commit/4c1abccf258c9247218e66610790043893cd6950\"\u003e4c1abcc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einteractions:\u003c/strong\u003e Sync InteractionSseEventInteractionStatus enum with InteractionStatus (\u003ca href=\"https://github.com/googleapis/python-genai/commit/ba854b2d29a3ff0d4758da886edabb458726b210\"\u003eba854b2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePublish the API reference on each release (\u003ca href=\"https://github.com/googleapis/python-genai/commit/1d12358a1398b9a510ae8ba25dd31e746d8e9be9\"\u003e1d12358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTransition docs workflow to GitHub Actions (\u003ca href=\"https://github.com/googleapis/python-genai/commit/3b1256ac5f4b8c49a469ca307ca765185184774d\"\u003e3b1256a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.31.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.30.1...v2.31.0\"\u003e2.31.0\u003c/a\u003e (2026-10-14)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003einteractions:\u003c/strong\u003e Add gemini-4-argon to Model enum (\u003ca href=\"https://github.com/googleapis/python-genai/commit/8554b07d0025e19361b7a10a6384cc143f3a8ea9\"\u003e8554b07\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eClear continuation state and preserve prompt feedback when continuation hop returns no candidates (\u003ca href=\"https://github.com/googleapis/python-genai/commit/a0d809cd838ec02938c1646c47cc3ece2761fc09\"\u003ea0d809c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix the function declaration parser for union types. Fixes \u003ca href=\"https://redirect.github.com/googleapis/python-genai/issues/3060\"\u003e#3060\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/python-genai/commit/be32e9e074e6a403621a6d52ae97f81f0777549e\"\u003ebe32e9e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix the grounding metadata merging for automatic continuation in generate content and generate content stream (\u003ca href=\"https://github.com/googleapis/python-genai/commit/f1499bb86c707d51b5b2684ff9423653cc74895c\"\u003ef1499bb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake continuation streams retry dropped hops, stop on prompt_feedback, and keep real errors in generate_content (\u003ca href=\"https://github.com/googleapis/python-genai/commit/339a92921ac877d07d34a3646cddefdf9c71565c\"\u003e339a929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch the mTLS endpoint to each transport's SSL context, including plain aiohttp (\u003ca href=\"https://github.com/googleapis/python-genai/commit/f8a469322cf66716ca3345c14516c0daa213ca1c\"\u003ef8a4693\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.30.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.30.0...v2.30.1\"\u003e2.30.1\u003c/a\u003e (2026-10-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eConcatenate output_text across multi-step model responses in a turn (\u003ca href=\"https://github.com/googleapis/python-genai/commit/180c3453f91e4734b828534950fa7f8526934b59\"\u003e180c345\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-genai/blob/main/CHANGELOG.md\"\u003egoogle-genai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.31.0...v2.32.0\"\u003e2.32.0\u003c/a\u003e (2026-10-21)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd base_voice to PromptedVoice in GAOS SDK (\u003ca href=\"https://github.com/googleapis/python-genai/commit/548864370ee9c88de0bd839b619dc05bcb7085e7\"\u003e5488643\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd generation_output_config to GenerateContentConfig (\u003ca href=\"https://github.com/googleapis/python-genai/commit/5c008e14b9c9fdecbaf61eb53ad7c09f57fa5f8a\"\u003e5c008e1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Live API in-session context updates (\u003ccode\u003esend_context_update\u003c/code\u003e) and types across GenAI SDKs. (\u003ca href=\"https://github.com/googleapis/python-genai/commit/364889aafe40bfa8f3b9db847ba272d299f7d632\"\u003e364889a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003esdks:\u003c/strong\u003e Enable \u003ccode\u003efixes.openSingleValueEnumsOct2026\u003c/code\u003e across all SDKs (\u003ca href=\"https://github.com/googleapis/python-genai/commit/78f6d3412caaaed44f99ce57be2d16d0b8c407cb\"\u003e78f6d34\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate discovery doc (\u003ca href=\"https://github.com/googleapis/python-genai/commit/6cd176e135a188bbb0d0f9afca520e7d6483823d\"\u003e6cd176e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBase64-encode inline bytes in Live send_tool_response (\u003ca href=\"https://github.com/googleapis/python-genai/commit/a7bbff6e73fa9444802cd9a17e8c94e30341bf5d\"\u003ea7bbff6\u003c/a\u003e), refs \u003ca href=\"https://redirect.github.com/googleapis/python-genai/issues/3022\"\u003e#3022\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash parsing responses with JSON objects in \u003ccode\u003eAny\u003c/code\u003e-typed fields (\u003ca href=\"https://github.com/googleapis/python-genai/commit/4c1abccf258c9247218e66610790043893cd6950\"\u003e4c1abcc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einteractions:\u003c/strong\u003e Sync InteractionSseEventInteractionStatus enum with InteractionStatus (\u003ca href=\"https://github.com/googleapis/python-genai/commit/ba854b2d29a3ff0d4758da886edabb458726b210\"\u003eba854b2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePublish the API reference on each release (\u003ca href=\"https://github.com/googleapis/python-genai/commit/1d12358a1398b9a510ae8ba25dd31e746d8e9be9\"\u003e1d12358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTransition docs workflow to GitHub Actions (\u003ca href=\"https://github.com/googleapis/python-genai/commit/3b1256ac5f4b8c49a469ca307ca765185184774d\"\u003e3b1256a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.30.1...v2.31.0\"\u003e2.31.0\u003c/a\u003e (2026-10-14)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003einteractions:\u003c/strong\u003e Add gemini-4-argon to Model enum (\u003ca href=\"https://github.com/googleapis/python-genai/commit/8554b07d0025e19361b7a10a6384cc143f3a8ea9\"\u003e8554b07\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eClear continuation state and preserve prompt feedback when continuation hop returns no candidates (\u003ca href=\"https://github.com/googleapis/python-genai/commit/a0d809cd838ec02938c1646c47cc3ece2761fc09\"\u003ea0d809c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix the function declaration parser for union types. Fixes \u003ca href=\"https://redirect.github.com/googleapis/python-genai/issues/3060\"\u003e#3060\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/python-genai/commit/be32e9e074e6a403621a6d52ae97f81f0777549e\"\u003ebe32e9e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix the grounding metadata merging for automatic continuation in generate content and generate content stream (\u003ca href=\"https://github.com/googleapis/python-genai/commit/f1499bb86c707d51b5b2684ff9423653cc74895c\"\u003ef1499bb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake continuation streams retry dropped hops, stop on prompt_feedback, and keep real errors in generate_content (\u003ca href=\"https://github.com/googleapis/python-genai/commit/339a92921ac877d07d34a3646cddefdf9c71565c\"\u003e339a929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch the mTLS endpoint to each transport's SSL context, including plain aiohttp (\u003ca href=\"https://github.com/googleapis/python-genai/commit/f8a469322cf66716ca3345c14516c0daa213ca1c\"\u003ef8a4693\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.30.0...v2.30.1\"\u003e2.30.1\u003c/a\u003e (2026-10-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eConcatenate output_text across multi-step model responses in a turn (\u003ca href=\"https://github.com/googleapis/python-genai/commit/180c3453f91e4734b828534950fa7f8526934b59\"\u003e180c345\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.29.0...v2.30.0\"\u003e2.30.0\u003c/a\u003e (2026-10-13)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/380733fc4ee376838d9121a5b2603230cd02298e\"\u003e\u003ccode\u003e380733f\u003c/code\u003e\u003c/a\u003e chore(main): release 2.32.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-genai/issues/3142\"\u003e#3142\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/a7bbff6e73fa9444802cd9a17e8c94e30341bf5d\"\u003e\u003ccode\u003ea7bbff6\u003c/code\u003e\u003c/a\u003e fix: Base64-encode inline bytes in Live send_tool_response\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/5c008e14b9c9fdecbaf61eb53ad7c09f57fa5f8a\"\u003e\u003ccode\u003e5c008e1\u003c/code\u003e\u003c/a\u003e feat: Add generation_output_config to GenerateContentConfig\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/4c1abccf258c9247218e66610790043893cd6950\"\u003e\u003ccode\u003e4c1abcc\u003c/code\u003e\u003c/a\u003e fix: Don't crash parsing responses with JSON objects in \u003ccode\u003eAny\u003c/code\u003e-typed fields\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/6cd176e135a188bbb0d0f9afca520e7d6483823d\"\u003e\u003ccode\u003e6cd176e\u003c/code\u003e\u003c/a\u003e feat: update discovery doc\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/ddd7d821497afe97a392e599ccffd5dd5011e44c\"\u003e\u003ccode\u003eddd7d82\u003c/code\u003e\u003c/a\u003e test: switch shared generate_images test to imagen-4.0-fast-generate-001\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/1d12358a1398b9a510ae8ba25dd31e746d8e9be9\"\u003e\u003ccode\u003e1d12358\u003c/code\u003e\u003c/a\u003e docs: publish the API reference on each release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/364889aafe40bfa8f3b9db847ba272d299f7d632\"\u003e\u003ccode\u003e364889a\u003c/code\u003e\u003c/a\u003e feat: Add Live API in-session context updates (\u003ccode\u003esend_context_update\u003c/code\u003e) and typ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/ba854b2d29a3ff0d4758da886edabb458726b210\"\u003e\u003ccode\u003eba854b2\u003c/code\u003e\u003c/a\u003e fix(interactions): sync InteractionSseEventInteractionStatus enum with Intera...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-genai/commit/3b1256ac5f4b8c49a469ca307ca765185184774d\"\u003e\u003ccode\u003e3b1256a\u003c/code\u003e\u003c/a\u003e docs: transition docs workflow to GitHub Actions\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-genai/compare/v2.27.0...v2.32.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.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...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-settings` from 2.15.0 to 2.16.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.16.1\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThis patch release fixes two CLI regressions introduced in 2.16.0.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed-length tuple positionals such as \u003ccode\u003eCliPositionalArg[tuple[int, int]]\u003c/code\u003e and \u003ccode\u003eNamedTuple\u003c/code\u003es are single-valued again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1069\"\u003e#1069\u003c/a\u003e). Since 2.16.0 they were treated as variadic, so a CLI either refused to start with a \u003ccode\u003eSettingsError\u003c/code\u003e or put the wrong argument into the tuple. Variable-length tuples (\u003ccode\u003etuple[int, ...]\u003c/code\u003e and bare \u003ccode\u003eTuple\u003c/code\u003e) are still variadic.\u003c/li\u003e\n\u003cli\u003eA field typed as an alias of a list of dicts, e.g. \u003ccode\u003etype ListOfDict = list[dict[str, int]]\u003c/code\u003e, accepts a JSON list again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1049\"\u003e#1049\u003c/a\u003e). Since 2.16.0, \u003ccode\u003e--xx '[{\u0026quot;a\u0026quot;:1},{\u0026quot;b\u0026quot;:2}]'\u003c/code\u003e was merged into the single dict \u003ccode\u003e{\u0026quot;a\u0026quot;: 1, \u0026quot;b\u0026quot;: 2}\u003c/code\u003e and failed validation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden CI by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1044\"\u003epydantic/pydantic-settings#1044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep list of dicts CLI values as lists 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/1049\"\u003epydantic/pydantic-settings#1049\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep fixed-length tuple CLI positionals single-valued 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/1069\"\u003epydantic/pydantic-settings#1069\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.16.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/1087\"\u003epydantic/pydantic-settings#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1056\"\u003epydantic/pydantic-settings#1056\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.16.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBreaking changes and behavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.10 is no longer supported\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1003\"\u003e#1003\u003c/a\u003e). pydantic-settings now requires Python 3.11+, since 3.10 reaches end of life this month. The \u003ccode\u003etomli\u003c/code\u003e fallback is gone in favor of stdlib \u003ccode\u003etomllib\u003c/code\u003e; the \u003ccode\u003etoml\u003c/code\u003e extra is kept as an empty extra so \u003ccode\u003epip install pydantic-settings[toml]\u003c/code\u003e keeps working.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003epython-dotenv\u0026gt;=1.2.2\u003c/code\u003e is now required\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/971\"\u003e#971\u003c/a\u003e) to pick up the fix for CVE-2026-28684.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAliases are ignored in every source when \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1033\"\u003e#1033\u003c/a\u003e). Env vars, secrets, CLI flags and defaults now use only field names, matching pydantic. An env var named after the alias is now ignored instead of raising \u003ccode\u003eextra_forbidden\u003c/code\u003e, and the CLI exposes \u003ccode\u003e--apple\u003c/code\u003e rather than \u003ccode\u003e--pomo\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003evalidation_alias\u003c/code\u003e takes precedence over \u003ccode\u003ealias\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1038\"\u003e#1038\u003c/a\u003e). When the two differ, values from JSON/YAML/TOML files and the CLI were silently ignored; they now load. CLI help lists the \u003ccode\u003evalidation_alias\u003c/code\u003e flag first, and \u003ccode\u003eCliApp.serialize\u003c/code\u003e emits it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCLI case-insensitivity only lowercases registered options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1036\"\u003e#1036\u003c/a\u003e). With \u003ccode\u003ecase_sensitive=False\u003c/code\u003e, args after \u003ccode\u003e--\u003c/code\u003e and those captured by \u003ccode\u003eCliUnknownArgs\u003c/code\u003e keep their case (\u003ccode\u003e-Xmx4G\u003c/code\u003e no longer becomes \u003ccode\u003e-xmx4g\u003c/code\u003e). Unrecognized options are now reported as typed (\u003ccode\u003e--NOPE\u003c/code\u003e instead of \u003ccode\u003e--nope\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eJSON and YAML config files are read as UTF-8 by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/955\"\u003e#955\u003c/a\u003e) instead of the locale encoding, completing the secrets-file fix from 2.15.0. \u003ccode\u003ejson_file_encoding\u003c/code\u003e/\u003ccode\u003eyaml_file_encoding\u003c/code\u003e still override it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDiscriminated union defaults are partially updated again\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/997\"\u003e#997\u003c/a\u003e). This reverts the 2.15.0 regression with \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e: the default is only dropped when the incoming value selects a \u003cem\u003edifferent\u003c/em\u003e union member.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.15 and pydantic 2.14 support\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1026\"\u003e#1026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1029\"\u003e#1029\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1022\"\u003e#1022\u003c/a\u003e). pydantic 2.14 broke \u003ccode\u003eCliApp.run\u003c/code\u003e and \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e handling; both are fixed.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCached settings instances\u003c/strong\u003e via \u003ccode\u003eSettings.settings_cached()\u003c/code\u003e and \u003ccode\u003eSettings.settings_clear_cache()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/952\"\u003e#952\u003c/a\u003e). These give you a process-local singleton per settings class without hand-rolling \u003ccode\u003elru_cache\u003c/code\u003e wrappers. Calling the class directly still builds a fresh instance.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAWS Systems Manager Parameter Store source\u003c/strong\u003e — \u003ccode\u003eAWSSystemsManagerSettingsSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/941\"\u003e#941\u003c/a\u003e). It recursively reads every parameter under an \u003ccode\u003essm_path\u003c/code\u003e, with \u003ccode\u003e/\u003c/code\u003e mapping onto nested models. Install it with the new \u003ccode\u003eaws-systems-manager\u003c/code\u003e extra.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenv_file_depth\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/940\"\u003e#940\u003c/a\u003e) lets a relative \u003ccode\u003eenv_file\u003c/code\u003e be found in parent directories, mirroring \u003ccode\u003epyproject_toml_depth\u003c/code\u003e. This is useful when scripts run from a subdirectory of a monorepo. It defaults to \u003ccode\u003e0\u003c/code\u003e, which keeps the current behavior.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eCliVariadicArg\u003c/code\u003e for named variadic options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/949\"\u003e#949\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/958\"\u003e#958\u003c/a\u003e). It accepts \u003ccode\u003e--param a b c\u003c/code\u003e in addition to repeated \u003ccode\u003e--param a --param b\u003c/code\u003e. Required fields need at least one value.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4e286e284fe43f0fb86872b91f708d3dd5356bfc\"\u003e\u003ccode\u003e4e286e2\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1087\"\u003e#1087\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/993b59e1682799d5ad33b721b7158718b6278944\"\u003e\u003ccode\u003e993b59e\u003c/code\u003e\u003c/a\u003e Keep fixed-length tuple CLI positionals single-valued (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1069\"\u003e#1069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f651a7a57a0e3b26147da02f2fda2d05f8c34cce\"\u003e\u003ccode\u003ef651a7a\u003c/code\u003e\u003c/a\u003e Keep list of dicts CLI values as lists (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1049\"\u003e#1049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ecf7d90bf1b1b71f2875f607c1668c44f576bf9c\"\u003e\u003ccode\u003eecf7d90\u003c/code\u003e\u003c/a\u003e Harden CI (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1044\"\u003e#1044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8c259f41b49b4cefbe4fb676d3c1f52dddd3cca8\"\u003e\u003ccode\u003e8c259f4\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1043\"\u003e#1043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4bc667ada383aca4df00304cd171f327a9fae163\"\u003e\u003ccode\u003e4bc667a\u003c/code\u003e\u003c/a\u003e Keep case of non-option CLI args when case_sensitive=False (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f75a8057a5fafe4aef3a042c2adf367c6987f73f\"\u003e\u003ccode\u003ef75a805\u003c/code\u003e\u003c/a\u003e Simplify alias resolution branch and test alias with AliasChoices/AliasPath (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/cfdc5585e821e84905905027de68a0188213537a\"\u003e\u003ccode\u003ecfdc558\u003c/code\u003e\u003c/a\u003e Honor env_parse_none_str for GCP Secret Manager (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1040\"\u003e#1040\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/081d39f9c73f46e68bc2bef75a23f7d84ed0c377\"\u003e\u003ccode\u003e081d39f\u003c/code\u003e\u003c/a\u003e Fix config file and CLI values being ignored when alias differs from validati...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c46ebc4cc599c09f3692f4d2e82a8f0bb5433f3a\"\u003e\u003ccode\u003ec46ebc4\u003c/code\u003e\u003c/a\u003e Expand home paths when checking TOML table headers (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.15.0...v2.16.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain` from 1.4.3 to 1.4.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain/releases\"\u003elangchain's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain==1.4.7\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.4.6\u003c/p\u003e\n\u003cp\u003echore(langchain): update lockfile (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41402\"\u003e#41402\u003c/a\u003e)\nrelease(langchain): 1.4.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41401\"\u003e#41401\u003c/a\u003e)\nchore(deps): bump certifi from 2025.11.12 to 2026.10.19 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41370\"\u003e#41370\u003c/a\u003e)\nfeat(core,langchain,standard-tests): read \u003ccode\u003etool-call-delta\u003c/code\u003e in stream consumers (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41246\"\u003e#41246\u003c/a\u003e)\nchore(deps): bump aiohttp from 3.14.4 to 3.14.5 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41360\"\u003e#41360\u003c/a\u003e)\nchore(deps): bump aiohttp from 3.14.3 to 3.14.4 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41330\"\u003e#41330\u003c/a\u003e)\nchore(deps): bump mcp from 2.1.1 to 2.2.0 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41270\"\u003e#41270\u003c/a\u003e)\nfeat(core): accept address inside LangChainTracer (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41006\"\u003e#41006\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain==1.4.6\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.4.5\u003c/p\u003e\n\u003cp\u003erelease(langchain): 1.4.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41247\"\u003e#41247\u003c/a\u003e)\nfeat(langchain): add opt-in per-call interrupts to HITL middleware (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41062\"\u003e#41062\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain==1.4.5\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.4.4\u003c/p\u003e\n\u003cp\u003erelease(langchain): 1.4.5 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41226\"\u003e#41226\u003c/a\u003e)\nfeat(langchain): accept \u003ccode\u003esummarizer\u003c/code\u003e in \u003ccode\u003eSummarizationMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41225\"\u003e#41225\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-fireworks==1.4.4\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-fireworks==1.4.3\u003c/p\u003e\n\u003cp\u003erelease(fireworks): 1.4.4 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38753\"\u003e#38753\u003c/a\u003e)\nfix(fireworks): report cached prompt token usage (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38751\"\u003e#38751\u003c/a\u003e)\nchore(deps): refresh lockfiles (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38746\"\u003e#38746\u003c/a\u003e)\nchore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38663\"\u003e#38663\u003c/a\u003e)\nchore: bump pytest from 9.1.0 to 9.1.1 in /libs/partners/fireworks (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38594\"\u003e#38594\u003c/a\u003e)\nchore: bump langsmith from 0.8.18 to 0.9.5 in /libs/partners/fireworks (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38595\"\u003e#38595\u003c/a\u003e)\ndocs(fireworks): clarify prompt-cache session affinity guidance (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38522\"\u003e#38522\u003c/a\u003e)\ntest(fireworks): cover request-level extra headers (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38518\"\u003e#38518\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain==1.4.4\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.4.3\u003c/p\u003e\n\u003cp\u003erelease(langchain): 1.4.4 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41163\"\u003e#41163\u003c/a\u003e)\nfix(langchain): (SummarizationMiddleware) retry summary step on context overflow (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41159\"\u003e#41159\u003c/a\u003e)\nchore(deps): bump fsspec from 2026.6.0 to 2026.9.0 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41097\"\u003e#41097\u003c/a\u003e)\nchore(deps): bump multidict from 6.7.0 to 6.9.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41075\"\u003e#41075\u003c/a\u003e)\nchore(deps): bump langgraph-sdk from 0.4.2 to 0.4.4 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41074\"\u003e#41074\u003c/a\u003e)\nchore(deps): bump fsspec from 2025.10.0 to 2026.6.0 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41071\"\u003e#41071\u003c/a\u003e)\nchore(langchain): bump minimum FastMCP to 4.0.11 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41054\"\u003e#41054\u003c/a\u003e)\nchore(deps): bump pyjwt from 2.13.0 to 2.15.0 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/40939\"\u003e#40939\u003c/a\u003e)\nchore(deps): bump urllib3 from 2.7.0 to 2.8.0 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/40943\"\u003e#40943\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/fbb8a35da7023ac0382c3b22f047337861bd3486\"\u003e\u003ccode\u003efbb8a35\u003c/code\u003e\u003c/a\u003e chore(langchain): update lockfile (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41402\"\u003e#41402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/ad92e36511c8e7836fd990c4497bfb0a024bf9d8\"\u003e\u003ccode\u003ead92e36\u003c/code\u003e\u003c/a\u003e release(langchain): 1.4.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41401\"\u003e#41401\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/bdf0f53ed0aec3c9ae371a549e1a4d2ee4e9f021\"\u003e\u003ccode\u003ebdf0f53\u003c/code\u003e\u003c/a\u003e release(core): 1.6.13 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41397\"\u003e#41397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/59be9ee06809103d4bd8db8554ab75d45e664733\"\u003e\u003ccode\u003e59be9ee\u003c/code\u003e\u003c/a\u003e chore(text-splitters): bump certifi to 2026.10.19 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41393\"\u003e#41393\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/82ef9338480c1d88eebe699ac2755e898b42c3d7\"\u003e\u003ccode\u003e82ef933\u003c/code\u003e\u003c/a\u003e release(perplexity): 1.4.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41392\"\u003e#41392\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/fc23e66e6622989aebb4ccd6f4cefa2198368168\"\u003e\u003ccode\u003efc23e66\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41354\"\u003e#41354\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/331e6bee6343b1c6e2f9c728a27973fd42894304\"\u003e\u003ccode\u003e331e6be\u003c/code\u003e\u003c/a\u003e chore(deps): bump certifi from 2025.11.12 to 2026.10.19 in /libs/partners/ant...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/144b0b4e12001152c3b11107434f11d39f218a04\"\u003e\u003ccode\u003e144b0b4\u003c/code\u003e\u003c/a\u003e chore(deps): bump certifi from 2025.8.3 to 2026.10.19 in /libs/partners/chrom...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/9b5ae668eec17b2ba122c5b5aeb94e1078ad3757\"\u003e\u003ccode\u003e9b5ae66\u003c/code\u003e\u003c/a\u003e chore(deps): bump certifi from 2025.8.3 to 2026.10.19 in /libs/partners/deeps...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/c773a1b5e5b50194300f6d7b5ff3cba7f332df0d\"\u003e\u003ccode\u003ec773a1b\u003c/code\u003e\u003c/a\u003e chore(deps): bump certifi from 2025.8.3 to 2026.10.19 in /libs/partners/exa (...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain==1.4.3...langchain==1.4.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-openai` from 1.6.7 to 1.7.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain/releases\"\u003elangchain-openai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-openai==1.7.2\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-openai==1.7.1\u003c/p\u003e\n\u003cp\u003erelease(openai): 1.7.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41245\"\u003e#41245\u003c/a\u003e)\nfix(openai): keep Responses stream items on one block when output_index drifts (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41121\"\u003e#41121\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-openai==1.7.1\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-openai==1.7.0\u003c/p\u003e\n\u003cp\u003erelease(openai): 1.7.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41222\"\u003e#41222\u003c/a\u003e)\nfeat(core,anthropic,openai): declare mid-conversation support in model profiles (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41180\"\u003e#41180\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-openai==1.7.0\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-openai==1.6.7\u003c/p\u003e\n\u003cp\u003erelease(openai): 1.7.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41154\"\u003e#41154\u003c/a\u003e)\nfeat(openai): support decisions api (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41125\"\u003e#41125\u003c/a\u003e)\nchore(deps): bump langgraph-sdk from 0.4.4 to 0.4.6 in /libs/partners/openai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41096\"\u003e#41096\u003c/a\u003e)\nchore(deps): bump langgraph-sdk from 0.4.2 to 0.4.4 in /libs/partners/openai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41072\"\u003e#41072\u003c/a\u003e)\nchore(deps): bump pyjwt from 2.15.0 to 2.15.1 in /libs/partners/openai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/40951\"\u003e#40951\u003c/a\u003e)\nchore(deps): bump urllib3 from 2.7.0 to 2.8.0 in /libs/partners/openai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/40952\"\u003e#40952\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/170060e8387e06cd67b2458db0f232b2fa53fefd\"\u003e\u003ccode\u003e170060e\u003c/code\u003e\u003c/a\u003e release(openai): 1.7.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41245\"\u003e#41245\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/4bbbc5a3b0ad47ff2d73bfdce4d4ab86ca5724f9\"\u003e\u003ccode\u003e4bbbc5a\u003c/code\u003e\u003c/a\u003e fix(openai): keep Responses stream items on one block when output_index drift...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/8ace87e7a6493d41d4c61bb41a637052367b27f3\"\u003e\u003ccode\u003e8ace87e\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41229\"\u003e#41229\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/f2bf626ccee0a0e88d560706d4fdad35e43116e5\"\u003e\u003ccode\u003ef2bf626\u003c/code\u003e\u003c/a\u003e release(langchain): 1.4.5 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41226\"\u003e#41226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/a0074fb7e5f3fe7c192fcec442582bf5babbf642\"\u003e\u003ccode\u003ea0074fb\u003c/code\u003e\u003c/a\u003e feat(langchain): accept \u003ccode\u003esummarizer\u003c/code\u003e in \u003ccode\u003eSummarizationMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41225\"\u003e#41225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/36fb6aa0a445e770521b63ff5aa97f8fd6aeb1be\"\u003e\u003ccode\u003e36fb6aa\u003c/code\u003e\u003c/a\u003e release(anthropic): 1.7.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41221\"\u003e#41221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/ba2baca02ea4b3add7ba08aeabf3673dc18199c6\"\u003e\u003ccode\u003eba2baca\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41215\"\u003e#41215\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/85e0b7da58c32922d8f991962739e9789eb1f649\"\u003e\u003ccode\u003e85e0b7d\u003c/code\u003e\u003c/a\u003e release(openai): 1.7.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41222\"\u003e#41222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/fddca066031a2122b3562485bd9c961a46978a1e\"\u003e\u003ccode\u003efddca06\u003c/code\u003e\u003c/a\u003e release(core): 1.6.10 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41220\"\u003e#41220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/e4b143729ffb3c6307376909d3aa9921b360c1f5\"\u003e\u003ccode\u003ee4b1437\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41145\"\u003e#41145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain-openai==1.6.7...langchain-openai==1.7.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-google-genai` from 4.4.0 to 4.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain-google/releases\"\u003elangchain-google-genai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-google-genai==4.4.2\u003c/h2\u003e\n\u003cp\u003eChanges since libs/genai/v4.4.1\u003c/p\u003e\n\u003cp\u003erelease(genai): 4.2.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2058\"\u003e#2058\u003c/a\u003e)\nfix(genai,vertexai): normalize model names and fix Gemini 3.5 cached content paths and streaming usage (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2044\"\u003e#2044\u003c/a\u003e)\nchore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1984\"\u003e#1984\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-google-genai==4.4.1\u003c/h2\u003e\n\u003cp\u003eChanges since libs/genai/v4.4.0\u003c/p\u003e\n\u003cp\u003erelease(genai): 4.4.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2050\"\u003e#2050\u003c/a\u003e)\nfix(genai): omit Bedrock cache points from Gemini prompts (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2049\"\u003e#2049\u003c/a\u003e)\nfix(genai): treat Gemini 4+ models as Gemini 3 or later (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2047\"\u003e#2047\u003c/a\u003e)\nchore: bump urllib3 from 2.7.0 to 2.8.0 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2032\"\u003e#2032\u003c/a\u003e)\nchore: bump the minor-and-patch group in /libs/genai with 4 updates (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2034\"\u003e#2034\u003c/a\u003e)\nchore: bump types-requests from 2.33.0.20260712 to 2.33.0.20260906 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2035\"\u003e#2035\u003c/a\u003e)\nchore: bump types-protobuf from 7.35.1.20260827 to 7.35.1.20260906 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2036\"\u003e#2036\u003c/a\u003e)\nchore: bump types-google-cloud-ndb from 2.4.0.20260724 to 2.4.0.20260909 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2037\"\u003e#2037\u003c/a\u003e)\nchore: bump anyio from 4.12.1 to 4.14.2 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2020\"\u003e#2020\u003c/a\u003e)\nchore: bump the minor-and-patch group across 1 directory with 2 updates (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1990\"\u003e#1990\u003c/a\u003e)\nchore: bump types-protobuf from 7.35.1.20260824 to 7.35.1.20260827 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1986\"\u003e#1986\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/69361c5365fc6c78d5948e3468bc7f415166219a\"\u003e\u003ccode\u003e69361c5\u003c/code\u003e\u003c/a\u003e release(genai): 4.2.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2058\"\u003e#2058\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/ee823bf2f7f12c52f1dcb65e15dcdfc7c5b89a85\"\u003e\u003ccode\u003eee823bf\u003c/code\u003e\u003c/a\u003e fix(genai,vertexai): normalize model names and fix Gemini 3.5 cached content ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/f24b735bc330a36875990bc143bbe1cae097ca68\"\u003e\u003ccode\u003ef24b735\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1984\"\u003e#1984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/63eba6800b5aa7761209c60fef8f17d030b8f34c\"\u003e\u003ccode\u003e63eba68\u003c/code\u003e\u003c/a\u003e chore: bump langgraph-sdk from 0.4.2 to 0.4.4 in /libs/community (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2052\"\u003e#2052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/3d3b22f43b8e201bcb015c1e5bb6218ec6d34216\"\u003e\u003ccode\u003e3d3b22f\u003c/code\u003e\u003c/a\u003e chore: bump langgraph-sdk from 0.4.2 to 0.4.4 in /libs/vertexai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2054\"\u003e#2054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/4e206c22bbfe5f44cc43ca99b128e91592c0f60f\"\u003e\u003ccode\u003e4e206c2\u003c/code\u003e\u003c/a\u003e chore: bump fsspec from 2025.12.0 to 2026.6.0 in /libs/vertexai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2051\"\u003e#2051\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/3df872becedbe39d92b77f0cad693ec6d13d5580\"\u003e\u003ccode\u003e3df872b\u003c/code\u003e\u003c/a\u003e release(genai): 4.4.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2050\"\u003e#2050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/933f69be0f2ef505ee352982ad06230d4af99fd2\"\u003e\u003ccode\u003e933f69b\u003c/code\u003e\u003c/a\u003e fix(genai): omit Bedrock cache points from Gemini prompts (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2049\"\u003e#2049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/24ed39867e4a42b305e7e89d42514a6e23e71142\"\u003e\u003ccode\u003e24ed398\u003c/code\u003e\u003c/a\u003e fix(genai): treat Gemini 4+ models as Gemini 3 or later (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2047\"\u003e#2047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/bd712d49ef6534a6170aebe1fcb97c9b695b144a\"\u003e\u003ccode\u003ebd712d4\u003c/code\u003e\u003c/a\u003e release(community): 5.1.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/2046\"\u003e#2046\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain-google/compare/libs/genai/v4.4.0...libs/genai/v4.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-anthropic` from 1.7.5 to 1.7.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain/releases\"\u003elangchain-anthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-anthropic==1.7.6\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-anthropic==1.7.5\u003c/p\u003e\n\u003cp\u003erelease(anthropic): 1.7.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41221\"\u003e#41221\u003c/a\u003e)\nchore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41145\"\u003e#41145\u003c/a\u003e)\nfeat(core,anthropic,openai): declare mid-conversation support in model profiles (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41180\"\u003e#41180\u003c/a\u003e)\nchore(deps): bump langgraph-sdk from 0.4.4 to 0.4.6 in /libs/partners/anthropic (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41101\"\u003e#41101\u003c/a\u003e)\nchore(deps): bump langgraph-sdk from 0.4.2 to 0.4.4 in /libs/partners/anthropic (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41080\"\u003e#41080\u003c/a\u003e)\nchore(deps): bump urllib3 from 2.7.0 to 2.8.0 in /libs/partners/anthropic (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/40964\"\u003e#40964\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/36fb6aa0a445e770521b63ff5aa97f8fd6aeb1be\"\u003e\u003ccode\u003e36fb6aa\u003c/code\u003e\u003c/a\u003e release(anthropic): 1.7.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41221\"\u003e#41221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/ba2baca02ea4b3add7ba08aeabf3673dc18199c6\"\u003e\u003ccode\u003eba2baca\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41215\"\u003e#41215\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/85e0b7da58c32922d8f991962739e9789eb1f649\"\u003e\u003ccode\u003e85e0b7d\u003c/code\u003e\u003c/a\u003e release(openai): 1.7.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41222\"\u003e#41222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/fddca066031a2122b3562485bd9c961a46978a1e\"\u003e\u003ccode\u003efddca06\u003c/code\u003e\u003c/a\u003e release(core): 1.6.10 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41220\"\u003e#41220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/e4b143729ffb3c6307376909d3aa9921b360c1f5\"\u003e\u003ccode\u003ee4b1437\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41145\"\u003e#41145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/b060a7466482ed5dac5fa1ef12e3ad21cccce385\"\u003e\u003ccode\u003eb060a74\u003c/code\u003e\u003c/a\u003e feat(core,anthropic,openai): declare mid-conversation support in model profil...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/34489d61433cbf5044a630de2e7797e361672900\"\u003e\u003ccode\u003e34489d6\u003c/code\u003e\u003c/a\u003e release(langchain): 1.4.4 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41163\"\u003e#41163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/e7ca68b92062312221d7768a9d731a2d4942416b\"\u003e\u003ccode\u003ee7ca68b\u003c/code\u003e\u003c/a\u003e fix(langchain): (SummarizationMiddleware) retry summary step on context overf...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/fc7dc7757a46ebb444be1ead0efdeab5ca7ad8ce\"\u003e\u003ccode\u003efc7dc77\u003c/code\u003e\u003c/a\u003e release(core): 1.6.9 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41160\"\u003e#41160\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/a055e836fd4ff75bfc2fe4adda33d06f0d625a63\"\u003e\u003ccode\u003ea055e83\u003c/code\u003e\u003c/a\u003e feat(core): accept a callable in with_retry (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/41158\"\u003e#41158\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain-anthropic==1.7.5...langchain-anthropic==1.7.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.43.107 to 1.43.118\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/185b1bd1bb677650bd986d581d19c0ed3596e583\"\u003e\u003ccode\u003e185b1bd\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.118'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/732c473d141c94365d0ba679f1b376b17ca7f429\"\u003e\u003ccode\u003e732c473\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.118\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b087cd3965d0c876c498ebd755d7663562dc39c8\"\u003e\u003ccode\u003eb087cd3\u003c/code\u003e\u003c/a\u003e Add cha...\n\n_Description has been truncated_","html_url":"https://github.com/5hirish/duct/pull/411","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/5hirish%2Fduct/issues/411","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/411/packages"}},{"old_version":"2.13.4","new_version":"2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-25T17:05:10.000Z","version_change":"2.13.4 → 2.14.1","issue":{"uuid":"6027004474","node_id":"PR_kwDOTn9DnM8AAAABKm3SVQ","number":133,"state":"open","title":"build(deps): bump the python-runtime group across 1 directory with 9 updates","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-10-25T17:05:10.000Z","updated_at":"2026-10-25T17:05:17.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python-runtime","update_count":9,"packages":[{"name":"fastapi","old_version":"0.140.13","new_version":"0.160.0","repository_url":"https://github.com/fastapi/fastapi"},{"name":"jsonschema","old_version":"4.23.0","new_version":"4.26.0","repository_url":"https://github.com/python-jsonschema/jsonschema"},{"name":"pydantic","old_version":"2.13.4","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [fastapi](https://github.com/fastapi/fastapi), [jsonschema](https://github.com/python-jsonschema/jsonschema), [pillow](https://github.com/python-pillow/Pillow), [pydantic](https://github.com/pydantic/pydantic), [pypdfium2](https://github.com/pypdfium2-team/pypdfium2), [pyyaml](https://github.com/yaml/pyyaml), [redis](https://github.com/redis/redis-py), [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) and [structlog](https://github.com/hynek/structlog) to permit the latest version.\nUpdates `fastapi` from 0.140.13 to 0.160.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.160.0\u003c/h2\u003e\n\u003cp\u003eQuery, header, cookie, and form parameter models now apply their \u003ccode\u003eextra\u003c/code\u003e configuration to all submitted fields in the same parameter location, consistent with Pydantic behavior. This includes fields declared in other models, individual parameters, or dependencies, which were previously excluded.\u003c/p\u003e\n\u003cp\u003eWith \u003ccode\u003eextra=\u0026quot;forbid\u0026quot;\u003c/code\u003e, fields outside the model are rejected even if another parameter declares them. With \u003ccode\u003eextra=\u0026quot;allow\u0026quot;\u003c/code\u003e, those fields are included as model extras. With the default \u003ccode\u003eextra=\u0026quot;ignore\u0026quot;\u003c/code\u003e, they are ignored.\u003c/p\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16594\"\u003e#16594\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump certifi from 2026.1.4 to 2026.10.19. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16571\"\u003e#16571\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.159.1\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16586\"\u003e#16586\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.159.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16584\"\u003e#16584\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.158.2\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16582\"\u003e#16582\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.158.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Preserve form media types in OpenAPI. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16579\"\u003e#16579\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.158.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16577\"\u003e#16577\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.157.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16573\"\u003e#16573\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📝 Clarify boolean query parameter parsing. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16569\"\u003e#16569\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Clarify nullable query parameters and path parameter defaults. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16568\"\u003e#16568\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/addd0778e996cf886972b8024113d79f8d0a3580\"\u003e\u003ccode\u003eaddd077\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.160.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16595\"\u003e#16595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/352a4edff3f4362f28c42da29e0879846f6f637e\"\u003e\u003ccode\u003e352a4ed\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/91a335ce946c7a832da973f2acf69b8876594216\"\u003e\u003ccode\u003e91a335c\u003c/code\u003e\u003c/a\u003e 🐛 Apply each parameter model's \u003ccode\u003eextra\u003c/code\u003e configuration to sibling fields (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16594\"\u003e#16594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ce6ee83e5411b98582e996e47edf7870418a68f4\"\u003e\u003ccode\u003ece6ee83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/97858ed7df0d27d5cc3e6c648bd6f0f9cdf25b1f\"\u003e\u003ccode\u003e97858ed\u003c/code\u003e\u003c/a\u003e ⬆ Bump certifi from 2026.1.4 to 2026.10.19 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16571\"\u003e#16571\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4bdfbe4513084b19e22421ce1f916d8c1ac462a0\"\u003e\u003ccode\u003e4bdfbe4\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.159.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16588\"\u003e#16588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b169d23e7d65c99ce83e1cf5c6e76f3f585c6017\"\u003e\u003ccode\u003eb169d23\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/86274cc0acc9fc6d608e251c874105c94634bddf\"\u003e\u003ccode\u003e86274cc\u003c/code\u003e\u003c/a\u003e ✨ Add support for optional unions of form models (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16586\"\u003e#16586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/68cc4cbb2e0600841b0d6bdd1cc29038b54a00e6\"\u003e\u003ccode\u003e68cc4cb\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.159.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16585\"\u003e#16585\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/fea4dedffddcf5641514334b78f69a9d93b1eb04\"\u003e\u003ccode\u003efea4ded\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.140.13...0.160.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jsonschema` from 4.23.0 to 4.26.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-jsonschema/jsonschema/releases\"\u003ejsonschema's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.26.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\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-jsonschema/jsonschema/pull/1400\"\u003epython-jsonschema/jsonschema#1400\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-jsonschema/jsonschema/pull/1405\"\u003epython-jsonschema/jsonschema#1405\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 6.5.0 to 6.6.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-jsonschema/jsonschema/pull/1406\"\u003epython-jsonschema/jsonschema#1406\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-jsonschema/jsonschema/pull/1407\"\u003epython-jsonschema/jsonschema#1407\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-jsonschema/jsonschema/pull/1413\"\u003epython-jsonschema/jsonschema#1413\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 6.6.0 to 6.6.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-jsonschema/jsonschema/pull/1412\"\u003epython-jsonschema/jsonschema#1412\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/gh-action-pypi-publish from 1.12.4 to 1.13.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-jsonschema/jsonschema/pull/1410\"\u003epython-jsonschema/jsonschema#1410\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump softprops/action-gh-release from 2.3.2 to 2.3.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/python-jsonschema/jsonschema/pull/1409\"\u003epython-jsonschema/jsonschema#1409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python from 5 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1411\"\u003epython-jsonschema/jsonschema#1411\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003evalidators: avoid \u003ccode\u003eurllib.request\u003c/code\u003e at import-time by \u003ca href=\"https://github.com/gudnimg\"\u003e\u003ccode\u003e@​gudnimg\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1416\"\u003epython-jsonschema/jsonschema#1416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 6.6.1 to 6.8.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-jsonschema/jsonschema/pull/1417\"\u003epython-jsonschema/jsonschema#1417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump softprops/action-gh-release from 2.3.3 to 2.3.4 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1418\"\u003epython-jsonschema/jsonschema#1418\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-jsonschema/jsonschema/pull/1415\"\u003epython-jsonschema/jsonschema#1415\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump softprops/action-gh-release from 2.3.4 to 2.4.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-jsonschema/jsonschema/pull/1419\"\u003epython-jsonschema/jsonschema#1419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump github/codeql-action from 3 to 4 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1420\"\u003epython-jsonschema/jsonschema#1420\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 6.8.0 to 7.1.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-jsonschema/jsonschema/pull/1421\"\u003epython-jsonschema/jsonschema#1421\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-jsonschema/jsonschema/pull/1424\"\u003epython-jsonschema/jsonschema#1424\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 7.1.0 to 7.1.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-jsonschema/jsonschema/pull/1423\"\u003epython-jsonschema/jsonschema#1423\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-jsonschema/jsonschema/pull/1425\"\u003epython-jsonschema/jsonschema#1425\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-jsonschema/jsonschema/pull/1429\"\u003epython-jsonschema/jsonschema#1429\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-jsonschema/jsonschema/pull/1431\"\u003epython-jsonschema/jsonschema#1431\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump softprops/action-gh-release from 2.4.1 to 2.4.2 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1432\"\u003epython-jsonschema/jsonschema#1432\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 7.1.1 to 7.1.2 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1430\"\u003epython-jsonschema/jsonschema#1430\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-jsonschema/jsonschema/pull/1434\"\u003epython-jsonschema/jsonschema#1434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 7.1.2 to 7.1.4 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1435\"\u003epython-jsonschema/jsonschema#1435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1436\"\u003epython-jsonschema/jsonschema#1436\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-jsonschema/jsonschema/pull/1437\"\u003epython-jsonschema/jsonschema#1437\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump softprops/action-gh-release from 2.4.2 to 2.5.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-jsonschema/jsonschema/pull/1438\"\u003epython-jsonschema/jsonschema#1438\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-jsonschema/jsonschema/pull/1439\"\u003epython-jsonschema/jsonschema#1439\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocument \u003ccode\u003euuid\u003c/code\u003e format by \u003ca href=\"https://github.com/sim642\"\u003e\u003ccode\u003e@​sim642\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1440\"\u003epython-jsonschema/jsonschema#1440\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-jsonschema/jsonschema/pull/1441\"\u003epython-jsonschema/jsonschema#1441\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 7.1.4 to 7.1.6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1442\"\u003epython-jsonschema/jsonschema#1442\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-jsonschema/jsonschema/pull/1443\"\u003epython-jsonschema/jsonschema#1443\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/gudnimg\"\u003e\u003ccode\u003e@​gudnimg\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1416\"\u003epython-jsonschema/jsonschema#1416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sim642\"\u003e\u003ccode\u003e@​sim642\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1440\"\u003epython-jsonschema/jsonschema#1440\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-jsonschema/jsonschema/compare/v4.25.1...v4.26.0\"\u003ehttps://github.com/python-jsonschema/jsonschema/compare/v4.25.1...v4.26.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.25.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidator\u003c/code\u003e protocol init to match runtime by \u003ca href=\"https://github.com/sirosen\"\u003e\u003ccode\u003e@​sirosen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/pull/1396\"\u003epython-jsonschema/jsonschema#1396\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/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst\"\u003ejsonschema's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev4.26.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eDecrease import time by delaying importing of \u003ccode\u003eurllib.request\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/1416\"\u003e#1416\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev4.25.1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix an incorrect required argument in the \u003ccode\u003eValidator\u003c/code\u003e protocol's type annotations (\u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/1396\"\u003e#1396\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev4.25.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for the \u003ccode\u003eiri\u003c/code\u003e and \u003ccode\u003eiri-reference\u003c/code\u003e formats to the \u003ccode\u003eformat-nongpl\u003c/code\u003e extra via the MIT-licensed \u003ccode\u003erfc3987-syntax\u003c/code\u003e.\nThey were alread supported by the \u003ccode\u003eformat\u003c/code\u003e extra. (\u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/1388\"\u003e#1388\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev4.24.1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eProperly escape segments in \u003ccode\u003eValidationError.json_path\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/139\"\u003e#139\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev4.24.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix improper handling of \u003ccode\u003eunevaluatedProperties\u003c/code\u003e in the presence of \u003ccode\u003eadditionalProperties\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/1351\"\u003e#1351\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.8 has been dropped, as it is end-of-life.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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-jsonschema/jsonschema/commit/a7277432b0f7bcd0551f6e589d30457017125df4\"\u003e\u003ccode\u003ea727743\u003c/code\u003e\u003c/a\u003e Add a changelog entry for 4.26.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/6d28c13efbbd6cf136143fdbb18f79d4476091f6\"\u003e\u003ccode\u003e6d28c13\u003c/code\u003e\u003c/a\u003e Update the lockfile.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/739499edc33c007ff62180c9fef61dbf5480bb7b\"\u003e\u003ccode\u003e739499e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/cb2d77980713577f65cc7e7c7c115932206393fd\"\u003e\u003ccode\u003ecb2d779\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/1443\"\u003e#1443\u003c/a\u003e from python-jsonschema/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/e6bbbb7c5bcdb32a654572d17bfce264aefd1f9d\"\u003e\u003ccode\u003ee6bbbb7\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/d56037a88faac4881214c6674a785b4abd428617\"\u003e\u003ccode\u003ed56037a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/1442\"\u003e#1442\u003c/a\u003e from python-jsonschema/dependabot/github_actions/ast...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/e54ce13fb590a5c17fb702431598a382de6e68f9\"\u003e\u003ccode\u003ee54ce13\u003c/code\u003e\u003c/a\u003e Bump astral-sh/setup-uv from 7.1.4 to 7.1.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/1f7c9fbd01d9c2f8ddd98065324062f7e122dbe1\"\u003e\u003ccode\u003e1f7c9fb\u003c/code\u003e\u003c/a\u003e Partially update docs requirements.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/241aec982bc8c867f276779faf20d49d9774532f\"\u003e\u003ccode\u003e241aec9\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-jsonschema/jsonschema/issues/1441\"\u003e#1441\u003c/a\u003e from python-jsonschema/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-jsonschema/jsonschema/commit/2818efb4fa446ed4fa7815b4e09a7b4b7c633852\"\u003e\u003ccode\u003e2818efb\u003c/code\u003e\u003c/a\u003e Apache-2.0 -\u0026gt; nongpl\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-jsonschema/jsonschema/compare/v4.23.0...v4.26.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` to 13.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e13.0.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/13.0.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/13.0.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove undocumented \u003ccode\u003eGifImagePlugin._save_netpbm\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9901\"\u003e#9901\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove ExifTags.IFD.Makernote \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9850\"\u003e#9850\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.10 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9750\"\u003e#9750\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove deprecations for Pillow 13.0.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9751\"\u003e#9751\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate IM image format \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9849\"\u003e#9849\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDeprecate ImageQt align8to32() in favour of raw encoder stride \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9940\"\u003e#9940\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDeprecate JpegImageFile.load_djpeg \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9924\"\u003e#9924\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate release notes for Pillow 13.0.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10223\"\u003e#10223\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect the ImageOps.fit centering corner documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10118\"\u003e#10118\u003c/a\u003e [\u003ca href=\"https://github.com/FanWu-ai\"\u003e\u003ccode\u003e@​FanWu-ai\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate Tidelift links \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10102\"\u003e#10102\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect bullet point syntax in release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10069\"\u003e#10069\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageDraw signatures in docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10065\"\u003e#10065\u003c/a\u003e [\u003ca href=\"https://github.com/ZainnQureshii\"\u003e\u003ccode\u003e@​ZainnQureshii\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10048\"\u003e#10048\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd pillow-wmf and pillow-zx-spectrum to third-party plugins list \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10037\"\u003e#10037\u003c/a\u003e [\u003ca href=\"https://github.com/bitplane\"\u003e\u003ccode\u003e@​bitplane\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDelete CLAUDE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10027\"\u003e#10027\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd pillow-lunasvg to third-party plugins list \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10016\"\u003e#10016\u003c/a\u003e [\u003ca href=\"https://github.com/Maksim-Burtsev\"\u003e\u003ccode\u003e@​Maksim-Burtsev\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eExtend security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10018\"\u003e#10018\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate Color3DLUT description \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10004\"\u003e#10004\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocument the internal image distinctness constraints \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9752\"\u003e#9752\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10000\"\u003e#10000\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eLink security policy in project metadata \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9980\"\u003e#9980\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImage.new(): correct docstring and comment about uninitialized memory \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9960\"\u003e#9960\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd AGENTS.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9582\"\u003e#9582\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8811\"\u003e#8811\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9937\"\u003e#9937\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9923\"\u003e#9923\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9922\"\u003e#9922\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eC interface is internal \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9879\"\u003e#9879\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect function references \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9895\"\u003e#9895\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevert move from python-pillow.org to python-pillow.github.io \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9830\"\u003e#9830\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd additional CVE numbers to 12.3.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9777\"\u003e#9777\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove remaining :rtype:s from docstrings \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9742\"\u003e#9742\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9759\"\u003e#9759\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4.3.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10175\"\u003e#10175\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10132\"\u003e#10132\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.5.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10108\"\u003e#10108\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10111\"\u003e#10111\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\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-pillow/Pillow/commit/293218ad059d994baf1777d882911bed6a49704a\"\u003e\u003ccode\u003e293218a\u003c/code\u003e\u003c/a\u003e 13.0.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/262e8e48229197ef08792de41a6bdd94e42219a0\"\u003e\u003ccode\u003e262e8e4\u003c/code\u003e\u003c/a\u003e Update release notes for Pillow 13.0.0 (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10223\"\u003e#10223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af56ace297b0991d02988fcc2ea933e4824b4fb3\"\u003e\u003ccode\u003eaf56ace\u003c/code\u003e\u003c/a\u003e Validate TIFF tag values against libtiff's own field definition before TIFFSe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/570df030c0d30c2bf5336b2ab59f3902d8ab0b6d\"\u003e\u003ccode\u003e570df03\u003c/code\u003e\u003c/a\u003e Validate TIFF tag values against libtiff's own field definition before TIFFSe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53318b50e8e9e85a57d033d4d879e1398d97aeb1\"\u003e\u003ccode\u003e53318b5\u003c/code\u003e\u003c/a\u003e Take libtiff scanline geometry tags from the image, not tiffinfo/exif (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10226\"\u003e#10226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/0a87417a4288ed72684e096d14d063ccdd478939\"\u003e\u003ccode\u003e0a87417\u003c/code\u003e\u003c/a\u003e Bound retained TIFF tag data by stream size (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10225\"\u003e#10225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/11582e5ffbdceb973d5ee593f3105af5a9852b40\"\u003e\u003ccode\u003e11582e5\u003c/code\u003e\u003c/a\u003e Fix heap buffer overflow in _tiffWriteProc when saving TIFF to BytesIO (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/10224\"\u003e#10224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8501adcb81088f1def8f59ff3f4b6837dd211c5f\"\u003e\u003ccode\u003e8501adc\u003c/code\u003e\u003c/a\u003e Fix test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/ec5f1cbcf67275641abaad5c065ffb64a0a804a9\"\u003e\u003ccode\u003eec5f1cb\u003c/code\u003e\u003c/a\u003e Take libtiff scanline geometry tags from the image, not tiffinfo/exif\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/4b63dffd8a6d980fa0e21b40832fa6cbf033eacf\"\u003e\u003ccode\u003e4b63dff\u003c/code\u003e\u003c/a\u003e Share TIFF tag data budget across frames\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.3.0...13.0.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.4 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pypdfium2` to 5.14.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/releases\"\u003epypdfium2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.14.0\u003c/h2\u003e\n\u003ch2\u003eRelease 5.14.0\u003c/h2\u003e\n\u003ch3\u003eSummary\u003c/h3\u003e\n\u003cp\u003e\u003cem\u003eRuntime\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ePdfDocument.get_identifier()\u003c/code\u003e: Fix a blunder that caused one byte too much to be chopped off.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ePdfDocument\u003c/code\u003e and \u003ccode\u003ePdfImage.load_jpeg()\u003c/code\u003e: With byte stream input, in the \u003ccode\u003e_buffer_reader\u003c/code\u003e callback, check that the number of bytes read into the buffer is no less than the buffer's size, otherwise indicate error.\n\u003ccode\u003e@Stjorn\u003c/code\u003e filed a security ticket that triggered this change; however we consider this more of a theoretical safety \u003cem\u003eenhancement\u003c/em\u003e and not actually a vulnerability, since under valid cirucmstances we do not envisage a situation where \u003ccode\u003ereadinto()\u003c/code\u003e would fall short on data. \u003ca href=\"https://vulnbrocards.com/brocards/vb002-no-exploit-from-heavens/\"\u003eNo exploit from the heavens.\u003c/a\u003e Updated documentation.\n(With older versions of pypdfium2, consider wrapping buffer input so that \u003ccode\u003ereadinto()\u003c/code\u003e raises an exception if it could not consume enough data to fill the buffer.)\u003c/li\u003e\n\u003cli\u003eIn \u003ccode\u003ePdfBitmap\u003c/code\u003e, unconditionally call \u003ccode\u003eFPDFBitmap_Destroy()\u003c/code\u003e when the bitmap is closed/finalized, i.e. including bitmaps created from a native, pdfium-external buffer (the default). The API does not affect external buffers, but assumably should still be called to release the \u003ccode\u003eFPDF_BITMAP\u003c/code\u003e shell itself.\u003c/li\u003e\n\u003cli\u003eOn foreign bitmaps, \u003ccode\u003ePdfBitmap.close()\u003c/code\u003e now warns about being a potentially unsafe operation, since it frees the C-side buffer. Set \u003ccode\u003e.warn_on_close = False\u003c/code\u003e to silence the warning, if you have made sure your usage is safe.\u003c/li\u003e\n\u003cli\u003eIn \u003ccode\u003eAutoCloseable\u003c/code\u003e, avoid assigning \u003ccode\u003eself\u003c/code\u003e to an instance attribute. This should result in improved GC behavior. Many thanks to James Barlow for pointing this out.\u003c/li\u003e\n\u003cli\u003eAdded bindings to some new PDFium APIs, along with CLI integration:\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ePdfAttachment\u003c/code\u003e: \u003ccode\u003e.{get,set}_desc()\u003c/code\u003e to read/write attachment descriptions, and \u003ccode\u003e.get_subtype()\u003c/code\u003e to obtain the MIME type.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ePdfBookmark.get_style()\u003c/code\u003e and \u003ccode\u003ePdfBookmarkStyle\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cem\u003eBuilds\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBuild scripts \u0026amp; CI: Updated PDFium pin from \u003ccode\u003e7913\u003c/code\u003e to \u003ccode\u003e8076\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003eUpdated \u003ccode\u003egn-dist\u003c/code\u003e from \u003ccode\u003e2407.3\u003c/code\u003e to \u003ccode\u003e2540.0\u003c/code\u003e (the \u003ccode\u003e2501\u003c/code\u003e build passed unused by pypdfium2).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePyodide: Patch freetype load flags to avoid \u003ccode\u003eFT_Load_Glyph()\u003c/code\u003e somehow corrupting the heap. It seems that this addresses the previously encountered crashes/freezes; however, the exact cause remains elusive. Anyway, many thanks to Hood Chatham for this finding.\n\u003cul\u003e\n\u003cli\u003eDropped debug symbols. Enabled PyPI upload. Updated documentation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cem\u003eSetup\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRefactored ctypesgen integration. It is now cloned into pypdfium2's source tree and bundled in sdists. This avoids having an external git URL in pyproject setup dependencies that defeats the idea of a hermetic (self-contained) package index. ctypesgen's own setup and versioning code has been removed, owing to the project's special status as setup-only dependency with a head-to-head development model that allows for a constantly evolving API. See the \u003ca href=\"https://github.com/pypdfium2-team/ctypesgen/blob/acf905804b2ae50d2b230308e1ca62875f4fe16c/README.md#installation\"\u003eupdated pypdfium2-ctypesgen \u003ccode\u003eREADME.md\u003c/code\u003e\u003c/a\u003e for integration instructions. This also made Python 3.6 compatibility straightforward to restore after all, aligning to a common baseline with pypdfium2 and gn-dist.\u003c/li\u003e\n\u003cli\u003eDropped module splitting (\u003ccode\u003ePYPDFIUM_MODULES={raw,helpers}\u003c/code\u003e) and the \u003ccode\u003esystem-generate\u003c/code\u003e target, which had been introduced for pypdfium2's own conda packaging (see below).\u003c!-- raw HTML omitted --\u003e\nWe recognize that module splitting may still be desirable in some downstream packaging contexts; however, the dynamic implementation had been standing in the way of a proper \u003ccode\u003epyproject.toml\u003c/code\u003e migration, since the \u003ccode\u003e[project]\u003c/code\u003e table does not allow for \u003ccode\u003ename\u003c/code\u003e to be specified dynamically. This means we could not retain a first-party dynamic setting much longer without impairing the project's progress. Instead we suggest that you simply patch the project name / module include rules (possibly via some kind of automation) if module splitting is needed. This change does not affect the module layout in \u003ccode\u003esrc/\u003c/code\u003e which upholds the logical separation.\u003c/li\u003e\n\u003cli\u003eLowered iOS min version from \u003ccode\u003e26_0\u003c/code\u003e to \u003ccode\u003e17_0\u003c/code\u003e thanks to an upstream contribution. (We have not released any iOS wheels yet, but it is handled in setup.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cem\u003eConda\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eRemoved pypdfium2's own conda packaging (\u003ccode\u003epypdfium2-team\u003c/code\u003e channel), following \u003ca href=\"https://github.com/mindee/doctr/discussions/2127\"\u003ethorough\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mindee/doctr/issues/113#issuecomment-5340008535\"\u003econsideration\u003c/a\u003e.\nUpstream \u003ccode\u003epdfium-binaries\u003c/code\u003e (\u003ccode\u003ebblanchon\u003c/code\u003e channel) followed suit and removed conda packaging as well, since pypdfium2 was the only known dependent.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eKey reasons include that it ended up covering far less platforms than we do with PyPI wheels, did not integrate with our own build strategies, and seemed fraught with workarounds.\nIn part, this has been a result of outsourcing the pdfium dependency (which seemed about the only viable option prior to \u003ca href=\"https://github.com/conda/ceps/blob/main/cep-0020.md\"\u003eCEP 20\u003c/a\u003e), along with other limitations, like conda generally supporting less platforms, and tight storage limits at \u003ccode\u003eanaconda.org\u003c/code\u003e that leave maintainers with tradeoffs between release frequency and platform inclusion vs. sustainability.\nThere is no fallback setup, either, which even seems to be an intentional limitation of conda's.\u003c/li\u003e\n\u003cli\u003eTo add to that, builds in a custom channel are inaccessible to dependents within the main anaconda/conda-forge ecosystems themselves, and generally a pain to manage, which resulted in negligible demand compared to PyPI. In short, the problems are manifold and technical debt is not far off.\u003c/li\u003e\n\u003cli\u003eThis means conda is effectively a third-party package environment similar to nixpkgs or Linux distribution packaging, unlike PyPI, which is a first-party package index where upstream authors publish directly. Conda build tools did not feel like being conceived for in-project packaging, either (the contrast to PyPA build backends is quite stark).\nOverall, there has been an unjustifably high complexity and amount of workarounds in relation to the low or nonexistent benefit.\u003c/li\u003e\n\u003cli\u003eTo be clear, any builds of pypdfium2 in conda-forge or anaconda/main are \u003ca href=\"https://github.com/pypdfium2-team/pypdfium2#unofficial-packages\"\u003eunofficial (third-party)\u003c/a\u003e. We generally do not recommend using third-party distributions of pypdfium2, and their varying maintainership is a potential concern as well. Anyway, we cannot support what we don't maintain.\u003c/li\u003e\n\u003cli\u003eInstead, we want to highlight that you can just install pypdfium2 from PyPI even in a conda env. There are no mandatory runtime dependencies, so the usual reasons against mixing in PyPI packages do not apply.\u003c/li\u003e\n\u003cli\u003e\u003cem\u003eMaintainer's note: If upstream ever (drastically) improve integration with custom channels to allow for meaningful first-party publishing, the door remains ajar to redo pypdfium2's conda packaging the CEP 20 way.\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBuild info\u003c/h3\u003e\n\u003cp\u003eThis release was made with the following build strategies:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePBIN: \u003ccode\u003e[macosx_arm64, macosx_x86_64, win_amd64, win_arm64, win32, manylinux_x86_64, manylinux_i686, manylinux_aarch64, manylinux_armv7l, manylinux_ppc64le, manylinux_mips64le, manylinux_mipsle, android_arm64_v8a, android_armeabi_v7a]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSBLD: \u003ccode\u003e[]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCIBW: \u003ccode\u003e[manylinux_riscv64, manylinux_loongarch64, manylinux_s390x, musllinux_x86_64, musllinux_aarch64, musllinux_armv7l, musllinux_i686, musllinux_ppc64le, musllinux_s390x, musllinux_riscv64, musllinux_loongarch64, pyodide_wasm32]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/21f85e273036f3bade4f67d896e1d05927e5f4b1\"\u003e\u003ccode\u003e21f85e2\u003c/code\u003e\u003c/a\u003e [autorelease main] update 5.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/1a9a921f26e2bf4c10754f3efb5172d6a77d43c1\"\u003e\u003ccode\u003e1a9a921\u003c/code\u003e\u003c/a\u003e Code style: change some \u003ccode\u003evar == 0\u003c/code\u003e checks to \u003ccode\u003enot var\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/46be6578997119ca06ec6b3e07cda2a0aba57e8e\"\u003e\u003ccode\u003e46be657\u003c/code\u003e\u003c/a\u003e PdfImage.extract(): improve implementation's code style\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/b2d146c20337339a440d8668a5c7056e3b48e1dc\"\u003e\u003ccode\u003eb2d146c\u003c/code\u003e\u003c/a\u003e PdfDocument.get_identifier() fix: avoid chopping off a byte too much\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/e856c86af6363f9326f8b7ab07a808ff6b68d7cc\"\u003e\u003ccode\u003ee856c86\u003c/code\u003e\u003c/a\u003e Add an errcheck to \u003ccode\u003ePdfAttachment.get_name()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/080d459a4536540fa65b13431dac3f1fa81001b6\"\u003e\u003ccode\u003e080d459\u003c/code\u003e\u003c/a\u003e sbuild: fix macOS wheel tag (version)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/3859503f346f3498aa0fe27c1fe8ef5883817e50\"\u003e\u003ccode\u003e3859503\u003c/code\u003e\u003c/a\u003e [autorelease main] update 5.14.0b1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/35304ab21576f896bef78738ad856ff7d9b037a2\"\u003e\u003ccode\u003e35304ab\u003c/code\u003e\u003c/a\u003e Prepare for a beta release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/f9859d3dc5b4ef1db28314dfb24737fb9b3eb58a\"\u003e\u003ccode\u003ef9859d3\u003c/code\u003e\u003c/a\u003e cli/toc: drop now-unnecessary pdfium version check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/commit/d7ab55ea770a02ba3eeae066f10c32fc5865a262\"\u003e\u003ccode\u003ed7ab55e\u003c/code\u003e\u003c/a\u003e Fix weird changelog wording\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypdfium2-team/pypdfium2/compare/4.30.0...5.14.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 `redis` to 8.1.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.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values ...\n\n_Description has been truncated_","html_url":"https://github.com/0ssol1620-byte/ai-knowledge-compiler/pull/133","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/0ssol1620-byte%2Fai-knowledge-compiler/issues/133","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/133/packages"}},{"old_version":"2.13.5","new_version":"2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-25T12:37:18.000Z","version_change":"2.13.5 → 2.14.1","issue":{"uuid":"6024503547","node_id":"PR_kwDORyAvrM8AAAABKk7o2Q","number":125,"state":"closed","title":"fix(deps): bump the minor-and-patch group with 8 updates","user":"dependabot[bot]","labels":["dependencies","python:uv","released"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-10-25T12:38:14.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-25T12:37:18.000Z","updated_at":"2026-10-25T16:36:10.000Z","time_to_close":56,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"fix(deps): bump","group_name":"minor-and-patch","update_count":8,"packages":[{"name":"google-auth","old_version":"2.59.1","new_version":"2.62.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"tenacity","old_version":"9.1.4","new_version":"9.2.1","repository_url":"https://github.com/jd/tenacity"},{"name":"pydantic","old_version":"2.13.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"openai","old_version":"3.24.0","new_version":"3.35.1","repository_url":"https://github.com/openai/openai-python"},{"name":"anthropic","old_version":"1.11.0","new_version":"1.15.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"sqlalchemy","old_version":"2.1.4","new_version":"2.1.5","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"pre-commit","old_version":"4.6.2","new_version":"4.7.0","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"ruff","old_version":"0.16.10","new_version":"0.17.1","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the minor-and-patch group with 8 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [google-auth](https://github.com/googleapis/google-cloud-python) | `2.59.1` | `2.62.0` |\n| [tenacity](https://github.com/jd/tenacity) | `9.1.4` | `9.2.1` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.5` | `2.14.1` |\n| [openai](https://github.com/openai/openai-python) | `3.24.0` | `3.35.1` |\n| [anthropic](https://github.com/anthropics/anthropic-sdk-python) | `1.11.0` | `1.15.0` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.1.4` | `2.1.5` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.2` | `4.7.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.10` | `0.17.1` |\n\nUpdates `google-auth` from 2.59.1 to 2.62.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-auth's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-auth: v2.62.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.61.0...google-auth-v2.62.0\"\u003e2.62.0\u003c/a\u003e (2026-10-12)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eauth:\u003c/strong\u003e enable bound ID tokens by default on Cloud Run (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18635\"\u003e#18635\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/8b625c4927371992f4569962292299eced040047\"\u003e8b625c4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-auth: v2.61.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.60.0...google-auth-v2.61.0\"\u003e2.61.0\u003c/a\u003e (2026-10-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eauth:\u003c/strong\u003e support bound access and ID tokens for GKE (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18594\"\u003e#18594\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/9f5fd7bdf0707a17c363482b094ccd70a4358389\"\u003e9f5fd7b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-auth: v2.60.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.59.1...google-auth-v2.60.0\"\u003e2.60.0\u003c/a\u003e (2026-10-02)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eauth:\u003c/strong\u003e Support sync credentials in AsyncAuthorizedSession (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18542\"\u003e#18542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/379956865248ebc40e5b851ede520056e65abcac\"\u003e3799568\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/5deaacb67a812e7afa0a647ddf744ebdcf59b270\"\u003e\u003ccode\u003e5deaacb\u003c/code\u003e\u003c/a\u003e chore(main): release google-auth 2.62.0 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18637\"\u003e#18637\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/8b625c4927371992f4569962292299eced040047\"\u003e\u003ccode\u003e8b625c4\u003c/code\u003e\u003c/a\u003e feat(auth): enable bound ID tokens by default on Cloud Run (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18635\"\u003e#18635\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/98fc3045ce3e3c5979f7bc7536bc7d0ef8f9a43b\"\u003e\u003ccode\u003e98fc304\u003c/code\u003e\u003c/a\u003e feat(dbapi): wire timeout parameter through Connection to execute_sql (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18484\"\u003e#18484\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/0cabf7cb08254e3d068c1a4579e9028adf585047\"\u003e\u003ccode\u003e0cabf7c\u003c/code\u003e\u003c/a\u003e test(spanner): increase stale database cleanup cutoff to 3 hours (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18633\"\u003e#18633\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/ab564738979f07c29ffb5774cdaa47307540ebe0\"\u003e\u003ccode\u003eab56473\u003c/code\u003e\u003c/a\u003e perf(spanner): prune lock and begin event allocations on single-use snapshots...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/78b9da2ed66434099f786b6d785d3855e5457075\"\u003e\u003ccode\u003e78b9da2\u003c/code\u003e\u003c/a\u003e fix(google-cloud-spanner): do not replay DDL statements on transaction retry ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f18a11eb4308b9a8889166ea3c1246fb8306a906\"\u003e\u003ccode\u003ef18a11e\u003c/code\u003e\u003c/a\u003e feat(db-dtypes): support pandas 3.1 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18590\"\u003e#18590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/590e43da42fea4f08be7b29b3bf63c3c3a33d112\"\u003e\u003ccode\u003e590e43d\u003c/code\u003e\u003c/a\u003e fix(bigquery): accept empty sourceFormat fields (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18472\"\u003e#18472\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/05b37756b0c4cb43ae978c928e90b1ff40a07ccd\"\u003e\u003ccode\u003e05b3775\u003c/code\u003e\u003c/a\u003e perf(spanner): optimize single-chunk results and single-row lookups (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/18602\"\u003e#18602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/a7678fd8c797e20d6f1fe0c8af84e7ded451f923\"\u003e\u003ccode\u003ea7678fd\u003c/code\u003e\u003c/a\u003e fix(spanner): eliminate duplicate metrics capture and measure full streaming ...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.59.1...google-auth-v2.62.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tenacity` from 9.1.4 to 9.2.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jd/tenacity/releases\"\u003etenacity's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.2.1\u003c/h2\u003e\n\u003cp\u003e9.2.0 was tagged but never reached PyPI: the upload rejected its package description (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/714\"\u003e#714\u003c/a\u003e). 9.2.1 is the first release on PyPI with everything in \u003ca href=\"https://github.com/jd/tenacity/releases/tag/9.2.0\"\u003e9.2.0\u003c/a\u003e, plus the changes below.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore(mypy): drop vestigial tornado ignore_missing_imports override by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/676\"\u003ejd/tenacity#676\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: annotate wait_base.\u003cstrong\u003eradd\u003c/strong\u003e as taking the int seed from sum() by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/677\"\u003ejd/tenacity#677\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(mypy): enable the strictness options \u003ccode\u003estrict\u003c/code\u003e leaves off by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/678\"\u003ejd/tenacity#678\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: drop always-true truthiness checks and enable truthy-bool by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/679\"\u003ejd/tenacity#679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: declare BaseAction's REPR_FIELDS and NAME as ClassVar by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/680\"\u003ejd/tenacity#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: fix possibly-undefined and deprecated call sites by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/681\"\u003ejd/tenacity#681\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: mark overridden methods with \u003ca href=\"https://github.com/override\"\u003e\u003ccode\u003e@​override\u003c/code\u003e\u003c/a\u003e by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/682\"\u003ejd/tenacity#682\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: restore support for falsy wait values and callable + strategy by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/694\"\u003ejd/tenacity#694\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: read the tornado global live instead of an import-time snapshot by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/696\"\u003ejd/tenacity#696\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect enabled=False on the direct-call path by \u003ca href=\"https://github.com/mahirhir\"\u003e\u003ccode\u003e@​mahirhir\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/645\"\u003ejd/tenacity#645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: only treat None and 0 as \u0026quot;no wait\u0026quot; by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/741\"\u003ejd/tenacity#741\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: restore PyPI-compatible package description by \u003ca href=\"https://github.com/arindamsikder\"\u003e\u003ccode\u003e@​arindamsikder\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/725\"\u003ejd/tenacity#725\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: check built distributions with twine by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/742\"\u003ejd/tenacity#742\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/mahirhir\"\u003e\u003ccode\u003e@​mahirhir\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/645\"\u003ejd/tenacity#645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kozlek\"\u003e\u003ccode\u003e@​kozlek\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/733\"\u003ejd/tenacity#733\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/arindamsikder\"\u003e\u003ccode\u003e@​arindamsikder\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/725\"\u003ejd/tenacity#725\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jd/tenacity/compare/9.2.0...9.2.1\"\u003ehttps://github.com/jd/tenacity/compare/9.2.0...9.2.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e9.2.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix ordinal suffix generation for large numbers ending in 11, 12, 13 by \u003ca href=\"https://github.com/ArmaanjeetSandhu\"\u003e\u003ccode\u003e@​ArmaanjeetSandhu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/556\"\u003ejd/tenacity#556\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: replace tox with poethepoet + uv by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/558\"\u003ejd/tenacity#558\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix README badges by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/559\"\u003ejd/tenacity#559\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add project URLs to pyproject.toml by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/560\"\u003ejd/tenacity#560\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add local dev commands to contribute section by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/561\"\u003ejd/tenacity#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: modernize async examples by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/562\"\u003ejd/tenacity#562\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: set version in sphinx conf by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/563\"\u003ejd/tenacity#563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve tornado mypy errors instead of suppressing them by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/568\"\u003ejd/tenacity#568\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add poe fmt task for auto-formatting by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/569\"\u003ejd/tenacity#569\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: replace curio example with trio by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/570\"\u003ejd/tenacity#570\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: enable ruff I, UP, B rules and auto-fix codebase by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/571\"\u003ejd/tenacity#571\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: harden release workflow by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/575\"\u003ejd/tenacity#575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use typing.Self on Python 3.11+ instead of typing_extensions by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/576\"\u003ejd/tenacity#576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump tornado version floor to \u0026gt;=6.0 by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/578\"\u003ejd/tenacity#578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clean up sphinx conf.py by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/579\"\u003ejd/tenacity#579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove stale noqa comments from \u003cstrong\u003einit\u003c/strong\u003e.py by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/577\"\u003ejd/tenacity#577\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: enable additional ruff rules and fix violations by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/584\"\u003ejd/tenacity#584\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: enable mypy strict mode in all test files by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/585\"\u003ejd/tenacity#585\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: make LoggerProtocol compatible with logging.Logger by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/586\"\u003ejd/tenacity#586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove unused IterState.delay_since_first_attempt field by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/587\"\u003ejd/tenacity#587\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove redundant raise before reraise() by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/588\"\u003ejd/tenacity#588\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: replace deprecated typing.Pattern with re.Pattern by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/589\"\u003ejd/tenacity#589\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix typos in docstrings by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/590\"\u003ejd/tenacity#590\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/jd/tenacity/commit/4410996dd9a96864a2733ce0778bcaa112b72811\"\u003e\u003ccode\u003e4410996\u003c/code\u003e\u003c/a\u003e ci: check built distributions with twine (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/b23844175feb8c62f4ebb0ef0833d993f439fa1f\"\u003e\u003ccode\u003eb238441\u003c/code\u003e\u003c/a\u003e fix: restore PyPI-compatible package description (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/b6201eceedfc719e996dcbc3f6c17f21011fb236\"\u003e\u003ccode\u003eb6201ec\u003c/code\u003e\u003c/a\u003e fix: only treat None and 0 as \u0026quot;no wait\u0026quot; (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/4a74682e0186b5f2d25906aa190cd639c705a958\"\u003e\u003ccode\u003e4a74682\u003c/code\u003e\u003c/a\u003e ci: drop the Mergify queue rule (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/739\"\u003e#739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/91169719f4fd127d680cafe026f1f95f04292094\"\u003e\u003ccode\u003e9116971\u003c/code\u003e\u003c/a\u003e ci: drop Mergify dismiss_reviews rule (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/737\"\u003e#737\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/2374b61424aab29769c3428b06d576ffc1a5a1d9\"\u003e\u003ccode\u003e2374b61\u003c/code\u003e\u003c/a\u003e ci: rely on the ruleset for the ci-gate check (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/736\"\u003e#736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/6df1aab1a2df84f2779f5f308c6171df9d051a35\"\u003e\u003ccode\u003e6df1aab\u003c/code\u003e\u003c/a\u003e ci: gate merges on a single ci-gate job (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/734\"\u003e#734\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/5f540fad77cbd90b4bcb21a9b859d5b07c08ba54\"\u003e\u003ccode\u003e5f540fa\u003c/code\u003e\u003c/a\u003e chore(mergify): replace deprecated autoqueue with auto_merge_conditions (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/8be01b1daf2010566fd936a5c2214efefa43edff\"\u003e\u003ccode\u003e8be01b1\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump ruff from 0.16.5 to 0.16.9 in the python group (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/3e58094d3bc414975aad9eadf343a32bdb3b89b3\"\u003e\u003ccode\u003e3e58094\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump the python group with 2 updates (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/707\"\u003e#707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jd/tenacity/compare/9.1.4...9.2.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 3.24.0 to 3.35.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.35.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.35.0...v3.35.1\"\u003e3.35.1\u003c/a\u003e (2026-10-18)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003epreserve beta Realtime byte reads on websockets 13 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4102\"\u003e#4102\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/5766349b2eda3ef63389fe8a30b6a9a1082b33e9\"\u003e5766349\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.35.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.34.0...v3.35.0\"\u003e3.35.0\u003c/a\u003e (2026-10-17)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add typed Live sideband events (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4099\"\u003e#4099\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8d5cbf07916b8f2409d940156135ce3c11ac1552\"\u003e8d5cbf0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add ultrafast service tier for Agents (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4101\"\u003e#4101\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/100bf8f7ab8409594258572fbf64bbde140c1c5f\"\u003e100bf8f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003erealtime:\u003c/strong\u003e preserve byte receives with websockets 13 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4098\"\u003e#4098\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/309916eb877132359ca2e37b0340a060580e39ee\"\u003e309916e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.34.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.33.0...v3.34.0\"\u003e3.34.0\u003c/a\u003e (2026-10-17)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add degraded external storage status (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4097\"\u003e#4097\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/b216cb2fbdefebba6f3997a180510f9e2b6b41af\"\u003eb216cb2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add Realtime Translation WebSocket sessions (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4095\"\u003e#4095\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/bfada5040b0171cd0ae61aefae8c78fcf83c804a\"\u003ebfada50\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.33.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.32.0...v3.33.0\"\u003e3.33.0\u003c/a\u003e (2026-10-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add safety identifiers to image requests and responses (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4093\"\u003e#4093\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/c969e32ebb325b5910aff4543187fedc5527e172\"\u003ec969e32\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e share Decisions cache breakpoint parameter type (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4092\"\u003e#4092\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/f7cefdaf059a3e6856d49b4bc2e2e5fbdef8193b\"\u003ef7cefda\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.32.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.31.0...v3.32.0\"\u003e3.32.0\u003c/a\u003e (2026-10-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add cache settings and key options [2/2] (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4087\"\u003e#4087\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/325da45934ddb1c1b6a0bed1681a8cf46c9a8712\"\u003e325da45\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add prompt-based voice creation (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4091\"\u003e#4091\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2e39db79e2f0ec41ce5d87b379be1e88c8298ea4\"\u003e2e39db7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add regional processing residency options (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4081\"\u003e#4081\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/21ce0c2eae47b389f25d79095d2ac5aec7812806\"\u003e21ce0c2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add response error diagnostics and model notices (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4086\"\u003e#4086\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/e71d781ac5e7b3f365ac130bf338baaf13ae720d\"\u003ee71d781\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/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.35.0...v3.35.1\"\u003e3.35.1\u003c/a\u003e (2026-10-18)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003epreserve beta Realtime byte reads on websockets 13 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4102\"\u003e#4102\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/5766349b2eda3ef63389fe8a30b6a9a1082b33e9\"\u003e5766349\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.34.0...v3.35.0\"\u003e3.35.0\u003c/a\u003e (2026-10-17)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add typed Live sideband events (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4099\"\u003e#4099\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8d5cbf07916b8f2409d940156135ce3c11ac1552\"\u003e8d5cbf0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add ultrafast service tier for Agents (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4101\"\u003e#4101\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/100bf8f7ab8409594258572fbf64bbde140c1c5f\"\u003e100bf8f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003erealtime:\u003c/strong\u003e preserve byte receives with websockets 13 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4098\"\u003e#4098\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/309916eb877132359ca2e37b0340a060580e39ee\"\u003e309916e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.33.0...v3.34.0\"\u003e3.34.0\u003c/a\u003e (2026-10-17)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add degraded external storage status (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4097\"\u003e#4097\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/b216cb2fbdefebba6f3997a180510f9e2b6b41af\"\u003eb216cb2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add Realtime Translation WebSocket sessions (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4095\"\u003e#4095\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/bfada5040b0171cd0ae61aefae8c78fcf83c804a\"\u003ebfada50\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.32.0...v3.33.0\"\u003e3.33.0\u003c/a\u003e (2026-10-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add safety identifiers to image requests and responses (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4093\"\u003e#4093\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/c969e32ebb325b5910aff4543187fedc5527e172\"\u003ec969e32\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e share Decisions cache breakpoint parameter type (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4092\"\u003e#4092\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/f7cefdaf059a3e6856d49b4bc2e2e5fbdef8193b\"\u003ef7cefda\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.31.0...v3.32.0\"\u003e3.32.0\u003c/a\u003e (2026-10-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add cache settings and key options [2/2] (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4087\"\u003e#4087\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/325da45934ddb1c1b6a0bed1681a8cf46c9a8712\"\u003e325da45\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add prompt-based voice creation (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4091\"\u003e#4091\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2e39db79e2f0ec41ce5d87b379be1e88c8298ea4\"\u003e2e39db7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add regional processing residency options (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4081\"\u003e#4081\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/21ce0c2eae47b389f25d79095d2ac5aec7812806\"\u003e21ce0c2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add response error diagnostics and model notices (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4086\"\u003e#4086\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/e71d781ac5e7b3f365ac130bf338baaf13ae720d\"\u003ee71d781\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e support audio fixture playback in Live sessions (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4085\"\u003e#4085\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/9998c1a3806afda55cb3923de1f7f49adcff5a7f\"\u003e9998c1a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e support Decisions in Live sessions (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4088\"\u003e#4088\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/230a923faba5574ebdc5b45a505a26b6bad79f61\"\u003e230a923\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\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/openai/openai-python/commit/547ecb1e4fc233f19030736c29fee4374dfbaca1\"\u003e\u003ccode\u003e547ecb1\u003c/code\u003e\u003c/a\u003e release: 3.35.1 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4103\"\u003e#4103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/5766349b2eda3ef63389fe8a30b6a9a1082b33e9\"\u003e\u003ccode\u003e5766349\u003c/code\u003e\u003c/a\u003e fix: preserve beta Realtime byte reads on websockets 13 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4102\"\u003e#4102\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/ab914006a2f520c5d63a69a60b40725ca5c72459\"\u003e\u003ccode\u003eab91400\u003c/code\u003e\u003c/a\u003e release: 3.35.0 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4100\"\u003e#4100\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/100bf8f7ab8409594258572fbf64bbde140c1c5f\"\u003e\u003ccode\u003e100bf8f\u003c/code\u003e\u003c/a\u003e feat(api): add ultrafast service tier for Agents (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4101\"\u003e#4101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8d5cbf07916b8f2409d940156135ce3c11ac1552\"\u003e\u003ccode\u003e8d5cbf0\u003c/code\u003e\u003c/a\u003e feat(api): add typed Live sideband events (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4099\"\u003e#4099\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/309916eb877132359ca2e37b0340a060580e39ee\"\u003e\u003ccode\u003e309916e\u003c/code\u003e\u003c/a\u003e fix(realtime): preserve byte receives with websockets 13 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4098\"\u003e#4098\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/3eb0837536bdd079f986c78964abb014fd6289ae\"\u003e\u003ccode\u003e3eb0837\u003c/code\u003e\u003c/a\u003e release: 3.34.0 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4096\"\u003e#4096\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/b216cb2fbdefebba6f3997a180510f9e2b6b41af\"\u003e\u003ccode\u003eb216cb2\u003c/code\u003e\u003c/a\u003e feat(api): add degraded external storage status (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4097\"\u003e#4097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/bfada5040b0171cd0ae61aefae8c78fcf83c804a\"\u003e\u003ccode\u003ebfada50\u003c/code\u003e\u003c/a\u003e feat(api): add Realtime Translation WebSocket sessions (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4095\"\u003e#4095\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/b7c5e5d67ee67d2f49a98f14a43abb8e7e502bb1\"\u003e\u003ccode\u003eb7c5e5d\u003c/code\u003e\u003c/a\u003e release: 3.33.0 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/4094\"\u003e#4094\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v3.24.0...v3.35.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anthropic` from 1.11.0 to 1.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/releases\"\u003eanthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.15.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add between_tools to thinking types in model capabilities\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add the speed parameter and usage.speed to Messages\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e return a Console organization's usage-tier spend cap as a read-only spend limit\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eci:\u003c/strong\u003e speed up breaking change detection\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e describe headers on Managed Agents and telemetry endpoints\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e simplify the script that formats code blocks in docs\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e cover OpenTelemetry options and method default timeouts\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e note that some models need a beta header to use speed\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.14.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add execution_identity to Managed Agents agents\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add organization_type_not_supported error to spend limit lists\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add telemetry destination test endpoint\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add telemetry destinations to the Admin API\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eclient:\u003c/strong\u003e add native support for OpenTelemetry tracing\u003c/p\u003e\n\u003cp\u003eIf your app registers a global tracer provider, the SDK will create spans with it after upgrading, and they'll be exported with the rest of your traces. Requests will also get trace context headers from the global propagator. To disable, pass \u003ccode\u003eopen_telemetry=False\u003c/code\u003e to the client or set \u003ccode\u003eANTHROPIC_OPEN_TELEMETRY=false\u003c/code\u003e. Learn more in the \u003ca href=\"https://platform.claude.com/docs/en/manage-claude/opentelemetry/sdk\"\u003edocumentation\u003c/a\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e rename telemetry destination test response model\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e close dropped streams without waiting for the collector\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003estreaming:\u003c/strong\u003e pass unknown event types through the message stream helpers\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003estreaming:\u003c/strong\u003e stop raising \u0026quot;Unexpected event order\u0026quot; for an event before message_start\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e correct prefill, thinking, fallback and model descriptions\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e document the scope required to assign the managed role\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e update model examples\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e narrow the tripwire test rule in the contributor guides\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md\"\u003eanthropic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v1.14.0...v1.15.0\"\u003e1.15.0\u003c/a\u003e (2026-10-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add between_tools to thinking types in model capabilities\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add the speed parameter and usage.speed to Messages\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e return a Console organization's usage-tier spend cap as a read-only spend limit\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eci:\u003c/strong\u003e speed up breaking change detection\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e describe headers on Managed Agents and telemetry endpoints\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e simplify the script that formats code blocks in docs\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e cover OpenTelemetry options and method default timeouts\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e note that some models need a beta header to use speed\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v1.13.0...v1.14.0\"\u003e1.14.0\u003c/a\u003e (2026-10-14)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add execution_identity to Managed Agents agents\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add organization_type_not_supported error to spend limit lists\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add telemetry destination test endpoint\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add telemetry destinations to the Admin API\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eclient:\u003c/strong\u003e add native support for OpenTelemetry tracing\u003c/p\u003e\n\u003cp\u003eIf your app registers a global tracer provider, the SDK will create spans with it after upgrading, and they'll be exported with the rest of your traces. Requests will also get trace context headers from the global propagator. To disable, pass \u003ccode\u003eopen_telemetry=False\u003c/code\u003e to the client or set \u003ccode\u003eANTHROPIC_OPEN_TELEMETRY=false\u003c/code\u003e. Learn more in the \u003ca href=\"https://platform.claude.com/docs/en/manage-claude/opentelemetry/sdk\"\u003edocumentation\u003c/a\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e rename telemetry destination test response model\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e close dropped streams without waiting for the collector\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003estreaming:\u003c/strong\u003e pass unknown event types through the message stream helpers\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003estreaming:\u003c/strong\u003e stop raising \u0026quot;Unexpected event order\u0026quot; for an event before message_start\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e correct prefill, thinking, fallback and model descriptions\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e document the scope required to assign the managed role\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e update model examples\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e narrow the tripwire test rule in the contributor guides\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/bcd55fe1d3f0f1240765f8cef04295b67337f55a\"\u003e\u003ccode\u003ebcd55fe\u003c/code\u003e\u003c/a\u003e release: 1.15.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/69743442287cc974aa9ff94d982f2c313f88edd2\"\u003e\u003ccode\u003e6974344\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/1021\"\u003e#1021\u003c/a\u003e from anthropics/synced/published\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/80404f64daa02dac4f75bf658c490dcae86f3910\"\u003e\u003ccode\u003e80404f6\u003c/code\u003e\u003c/a\u003e chore(tests): cover OpenTelemetry options and method default timeouts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/ef9133691b1eb0c0dc82c91398300e1a7b602674\"\u003e\u003ccode\u003eef91336\u003c/code\u003e\u003c/a\u003e feat(helpers): retry a rate-limited fast fallback at standard speed (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/1024\"\u003e#1024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/9ace6c5c771031812b91b4f2e539aa1e72448769\"\u003e\u003ccode\u003e9ace6c5\u003c/code\u003e\u003c/a\u003e feat(api): add between_tools to thinking types in model capabilities\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d44d21886402b894a3698defeaa89ea1455a845d\"\u003e\u003ccode\u003ed44d218\u003c/code\u003e\u003c/a\u003e chore(docs): describe headers on Managed Agents and telemetry endpoints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/ef59b87af236955e0dc47e0a95eb74b092944089\"\u003e\u003ccode\u003eef59b87\u003c/code\u003e\u003c/a\u003e docs(api): note that some models need a beta header to use speed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/c10fe778731adce8f584ef888b4bba3a04913d62\"\u003e\u003ccode\u003ec10fe77\u003c/code\u003e\u003c/a\u003e docs(changelog): shorten the OpenTelemetry tracing note (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/1023\"\u003e#1023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5b187415d6426bae8a76a76e46934418d85e3e71\"\u003e\u003ccode\u003e5b18741\u003c/code\u003e\u003c/a\u003e chore(internal): simplify the script that formats code blocks in docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f0e30dcc1740e121bcd08dff3341bfbd0e4f9fb0\"\u003e\u003ccode\u003ef0e30dc\u003c/code\u003e\u003c/a\u003e feat(api): add the speed parameter and usage.speed to Messages\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v1.11.0...v1.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.1.4 to 2.1.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.1.5\u003c/h1\u003e\n\u003cp\u003eReleased: October 16, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [feature]\u003c/strong\u003e Added the \u003ccode\u003e_orm.Unmapped\u003c/code\u003e annotation and the\n\u003ccode\u003e_orm.unmapped_column()\u003c/code\u003e construct, providing a declarative-compatible\napproach to having \u0026quot;excluded\u0026quot; columns in a Declarative model, that is,\ncolumns that are part of the \u003ccode\u003e_schema.Table\u003c/code\u003e but are not mapped,\nreplacing the use of \u003ccode\u003e_orm.Mapper.exclude_properties\u003c/code\u003e for this\npurpose when using a Declarative mapping.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13650\"\u003e#13650\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug] [regression]\u003c/strong\u003e Fixed regression caused by \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/11917\"\u003e#11917\u003c/a\u003e in version 2.0.36 where an ORM\nenabled \u003ccode\u003e_sql.update()\u003c/code\u003e using WHERE criteria which matched more than\none object present in the \u003ccode\u003e_orm.Session\u003c/code\u003e would expire server-side\nonupdate columns, as well as columns that were SET to a SQL expression, on\nonly one of the matched objects, leaving the remaining objects with stale\nvalues for those attributes. The columns are now expired for all matched\nobjects.\u003c/p\u003e\n\u003cp\u003eThis change is also \u003cstrong\u003ebackported\u003c/strong\u003e to: 2.0.55\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13675\"\u003e#13675\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [deprecated]\u003c/strong\u003e Using the \u003ccode\u003e_orm.Mapper.exclude_properties\u003c/code\u003e or\n\u003ccode\u003e_orm.Mapper.include_properties\u003c/code\u003e parameters on a Declarative\nmapping to exclude attributes that are declared on the class, such as with\n\u003ccode\u003e_orm.mapped_column()\u003c/code\u003e, is deprecated and now emits a deprecation\nwarning.  This use was never supported, and depending on the arguments\npassed to \u003ccode\u003e_orm.mapped_column()\u003c/code\u003e, the attribute could remain mapped\nregardless; in particular, as of 2.1 this includes ORM mapped dataclasses\nwhere \u003ccode\u003e_orm.mapped_column.default\u003c/code\u003e is present.  The new\n\u003ccode\u003e_orm.unmapped_column()\u003c/code\u003e construct should be used instead.  Excluding\ncolumns that are present only in the \u003ccode\u003e_schema.Table\u003c/code\u003e, such as those\nfrom \u003ccode\u003e__table__\u003c/code\u003e, \u003ccode\u003e__table_args__\u003c/code\u003e or table reflection, is not\naffected.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13650\"\u003e#13650\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eschema\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e[schema] [bug]\u003c/strong\u003e Fixed issue where dialect-specific keyword arguments established on a\n\u003ccode\u003eForeignKeyConstraint\u003c/code\u003e, \u003ccode\u003eForeignKey\u003c/code\u003e or\n\u003ccode\u003eCheckConstraint\u003c/code\u003e, such as \u003ccode\u003epostgresql_not_valid\u003c/code\u003e, were not\ncarried along to the copy of the constraint produced by\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 4.6.2 to 4.7.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.7.0\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks during commit with \u003ccode\u003e-a\u003c/code\u003e or inside a submodule.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3773\"\u003e#3773\u003c/a\u003e issue by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e PR by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.7.0 - 2026-10-12\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks during commit with \u003ccode\u003e-a\u003c/code\u003e or inside a submodule.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3773\"\u003e#3773\u003c/a\u003e issue by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e PR by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/65bb884a567e8be6adc51e8bfbcf26f708eb35a2\"\u003e\u003ccode\u003e65bb884\u003c/code\u003e\u003c/a\u003e v4.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/73926c191e10d2ede0ca627632e6e697d8092a61\"\u003e\u003ccode\u003e73926c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e from cbirkhold/node-no-git-env-npm-install\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/860d07d18211a0154ffaa4e77bf2a43c2b2473a9\"\u003e\u003ccode\u003e860d07d\u003c/code\u003e\u003c/a\u003e don't leak GIT_* env into \u003ccode\u003enpm install\u003c/code\u003e for \u003ccode\u003elanguage: node\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9ad8a0a99acec306e6e9c32490b0088008b83069\"\u003e\u003ccode\u003e9ad8a0a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3775\"\u003e#3775\u003c/a\u003e from pre-commit/contextlib-chdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9905e88afc7d860ccf21fba40fc9f5f23e0e0100\"\u003e\u003ccode\u003e9905e88\u003c/code\u003e\u003c/a\u003e use contextlib.chdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/59cb7925317a3c548ccb8cb17bbfb09d81ac8367\"\u003e\u003ccode\u003e59cb792\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3771\"\u003e#3771\u003c/a\u003e from pre-commit/all-repos_autofix_py311-plus\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2be170142fb6e0f1402a8bf036b5c9f8dd27fd09\"\u003e\u003ccode\u003e2be1701\u003c/code\u003e\u003c/a\u003e remove triple-nested withs for 3.14 coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/4c8d22aa125e68c6f45b4f71359c1bd7942f844f\"\u003e\u003ccode\u003e4c8d22a\u003c/code\u003e\u003c/a\u003e py311+\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/c4292384c94590cd8e6c68f677d95e3675994602\"\u003e\u003ccode\u003ec429238\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3770\"\u003e#3770\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f49e251f379f2c704e1223a791766e2bc9c78602\"\u003e\u003ccode\u003ef49e251\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.6.2...v4.7.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.16.10 to 0.17.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.17.1\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.17.1\u003c/h2\u003e\n\u003cp\u003e|  File  | Platform | Checksum |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.17.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-09.\u003c/p\u003e\n\u003cp\u003eThe executables in our macOS and Windows release archives and \u003ccode\u003eruff\u003c/code\u003e wheels are now code-signed.\nmacOS executables are signed with an Apple Developer ID certificate and notarized by Apple. Windows\nexecutables have timestamped Authenticode signatures from Azure Artifact Signing. This enables\nverification of the release publisher and binary integrity, supports publisher-based allowlisting,\nand should reduce security warnings and antivirus false positives.\u003c/p\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate the default and latest Python versions for 3.15 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28792\"\u003e#28792\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eRuff now defaults to Python 3.11 instead of 3.10 when no Python version is configured through\n\u003ca href=\"https://docs.astral.sh/ruff/settings/#target-version\"\u003e\u003ccode\u003etarget-version\u003c/code\u003e\u003c/a\u003e or\n\u003ca href=\"https://docs.astral.sh/ruff/configuration/#inferring-the-python-version\"\u003e\u003ccode\u003erequires-python\u003c/code\u003e\u003c/a\u003e. When\nchecking for syntax errors without a configured Python version, Ruff now defaults to Python 3.15\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/astral-sh/ruff/commit/4683270c69cbdaf6ad64d3f983fc458d5a43b41f\"\u003e\u003ccode\u003e4683270\u003c/code\u003e\u003c/a\u003e Bump version to 0.17.1 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29420\"\u003e#29420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3514027edb659bbc3c787d355be9d130e5587f15\"\u003e\u003ccode\u003e3514027\u003c/code\u003e\u003c/a\u003e [ty] Update typing conformance suite pin (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29417\"\u003e#29417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/829455624d78f2e89669e4b4b14af2b96abdb1ae\"\u003e\u003ccode\u003e8294556\u003c/code\u003e\u003c/a\u003e Update referenced PR security-review workflow (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29237\"\u003e#29237\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d1e1b1f69b511df4385f64b510eeec4da01c1a...\n\n_Description has been truncated_","html_url":"https://github.com/mini-app-polis/common-python-utils/pull/125","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mini-app-polis%2Fcommon-python-utils/issues/125","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/125/packages"}},{"old_version":"2.12.5","new_version":"2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-25T11:47:11.000Z","version_change":"2.12.5 → 2.14.1","issue":{"uuid":"6024093408","node_id":"PR_kwDOOEWHaM8AAAABKknaEg","number":4684,"state":"closed","title":"chore(deps): bump the integration-tests-minor-and-patch group across 1 directory with 58 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-10-25T17:51:03.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-25T11:47:11.000Z","updated_at":"2026-10-25T17:51:07.000Z","time_to_close":21832,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"integration-tests-minor-and-patch","update_count":58,"packages":[{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-asyncio","old_version":"1.3.0","new_version":"1.4.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"pytest-order","old_version":"1.3.0","new_version":"1.5.0","repository_url":"https://github.com/pytest-dev/pytest-order"},{"name":"aiohttp","old_version":"3.14.4","new_version":"3.14.5","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"aiokafka","old_version":"0.12.0","new_version":"0.14.0","repository_url":"https://github.com/aio-libs/aiokafka"},{"name":"aiolimiter","old_version":"1.2.1","new_version":"1.3.0","repository_url":"https://github.com/mjpieters/aiolimiter"},{"name":"azure-storage-blob","old_version":"12.28.0","new_version":"12.31.0","repository_url":"https://github.com/Azure/azure-sdk-for-python"},{"name":"azure-storage-file-share","old_version":"12.19.0","new_version":"12.27.0","repository_url":"https://github.com/Azure/azure-sdk-for-python"},{"name":"box-sdk-gen","old_version":"1.12.0","new_version":"1.17.0","repository_url":"https://github.com/box/box-python-sdk-gen"},{"name":"celery","old_version":"5.4.0","new_version":"5.6.3","repository_url":"https://github.com/celery/celery"},{"name":"confluent-kafka","old_version":"2.8.0","new_version":"2.16.0","repository_url":"https://github.com/confluentinc/confluent-kafka-python"},{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.2","repository_url":"https://github.com/pyca/cryptography"},{"name":"curl-cffi","old_version":"0.15.0","new_version":"0.16.3","repository_url":"https://github.com/lexiforest/curl_cffi"},{"name":"dependency-injector","old_version":"4.44.0","new_version":"4.49.1","repository_url":"https://github.com/ets-labs/python-dependency-injector"},{"name":"discord-py","old_version":"2.6.3","new_version":"2.7.1","repository_url":"https://github.com/Rapptz/discord.py"},{"name":"dropbox","old_version":"12.0.2","new_version":"12.2.3","repository_url":"https://github.com/dropbox/dropbox-sdk-python"},{"name":"docx2python","old_version":"3.5.0","new_version":"3.7.1","repository_url":"https://github.com/ShayHill/docx2python"},{"name":"fastapi","old_version":"0.136.3","new_version":"0.159.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"starlette","old_version":"1.7.0","new_version":"1.9.0","repository_url":"https://github.com/Kludex/starlette"},{"name":"feedparser","old_version":"6.0.12","new_version":"6.0.14","repository_url":"https://github.com/kurtmckee/feedparser"},{"name":"trafilatura","old_version":"2.0.0","new_version":"2.3.1","repository_url":"https://github.com/adbar/trafilatura"},{"name":"markdownify","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/matthewwithanm/python-markdownify"},{"name":"google-api-python-client","old_version":"2.161.0","new_version":"2.201.0","repository_url":"https://github.com/googleapis/google-api-python-client"},{"name":"google-auth-oauthlib","old_version":"1.2.1","new_version":"1.5.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"jsonschema","old_version":"4.23.0","new_version":"4.26.0","repository_url":"https://github.com/python-jsonschema/jsonschema"},{"name":"langchain-anthropic","old_version":"1.4.6","new_version":"1.7.6","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-aws","old_version":"1.1.0","new_version":"1.9.0","repository_url":"https://github.com/langchain-ai/langchain-aws"},{"name":"langchain-cohere","old_version":"0.5.0","new_version":"0.6.0","repository_url":"https://github.com/langchain-ai/langchain-cohere"},{"name":"langchain-community","old_version":"0.4.1","new_version":"0.4.2","repository_url":"https://github.com/langchain-ai/langchain-community"},{"name":"langchain-experimental","old_version":"0.4.0","new_version":"0.4.2","repository_url":"https://github.com/langchain-ai/langchain-experimental"},{"name":"langchain-fireworks","old_version":"1.1.0","new_version":"1.7.1","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-groq","old_version":"1.1.0","new_version":"1.1.3","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-ollama","old_version":"1.0.0","new_version":"1.1.0","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-openai","old_version":"1.1.14","new_version":"1.7.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-voyageai","old_version":"0.3.0","new_version":"0.4.1","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-xai","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain","old_version":"1.3.9","new_version":"1.4.7","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"markdown","old_version":"3.8.1","new_version":"3.11.2","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"monday-api-python-sdk","old_version":"1.6.5","new_version":"1.6.8","repository_url":"https://github.com/mondaycom/monday-api-python-sdk"},{"name":"msgspec","old_version":"0.20.0","new_version":"0.22.0","repository_url":"https://github.com/msgspec/msgspec"},{"name":"msgraph-sdk","old_version":"1.16.0","new_version":"1.64.0","repository_url":"https://github.com/microsoftgraph/msgraph-sdk-python"},{"name":"nats-py","old_version":"2.1.0","new_version":"2.16.0","repository_url":"https://github.com/nats-io/nats.py"},{"name":"numpy","old_version":"2.3.2","new_version":"2.5.4","repository_url":"https://github.com/numpy/numpy"},{"name":"opik","old_version":"2.2.99","new_version":"2.2.115","repository_url":"https://github.com/comet-ml/opik"},{"name":"pdfplumber","old_version":"0.11.9","new_version":"0.11.10","repository_url":"https://github.com/jsvine/pdfplumber"},{"name":"pillow-avif-plugin","old_version":"1.5.5","new_version":"1.6.0","repository_url":"https://github.com/fdintino/pillow-avif-plugin"},{"name":"prometheus-client","old_version":"0.21.1","new_version":"0.26.0","repository_url":"https://github.com/prometheus/client_python"},{"name":"pydantic","old_version":"2.12.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"python-arango","old_version":"8.1.5","new_version":"8.3.6","repository_url":"https://github.com/arangodb/python-arango"},{"name":"pymongo","old_version":"4.18.2","new_version":"4.19.0","repository_url":"https://github.com/mongodb/mongo-python-driver"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.4","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"redshift-connector","old_version":"2.1.17","new_version":"2.2.0","repository_url":"https://github.com/aws/amazon-redshift-python-driver"},{"name":"python-multipart","old_version":"0.0.31","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"qdrant-client","old_version":"1.13.1","new_version":"1.20.0","repository_url":"https://github.com/qdrant/qdrant-client"},{"name":"transformers","old_version":"5.18.0","new_version":"5.20.2","repository_url":"https://github.com/huggingface/transformers"},{"name":"slack-sdk","old_version":"3.27.0","new_version":"3.45.0","repository_url":"https://github.com/slackapi/python-slack-sdk"},{"name":"thrift","old_version":"0.24.0","new_version":"0.25.0"},{"name":"uvicorn","old_version":"0.37.0","new_version":"0.54.0","repository_url":"https://github.com/Kludex/uvicorn"}],"path":null,"ecosystem":"pip"},"body":"Bumps the integration-tests-minor-and-patch group with 58 updates in the /integration-tests directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `1.3.0` | `1.4.0` |\n| [pytest-order](https://github.com/pytest-dev/pytest-order) | `1.3.0` | `1.5.0` |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.14.4` | `3.14.5` |\n| [aiokafka](https://github.com/aio-libs/aiokafka) | `0.12.0` | `0.14.0` |\n| [aiolimiter](https://github.com/mjpieters/aiolimiter) | `1.2.1` | `1.3.0` |\n| [azure-storage-blob](https://github.com/Azure/azure-sdk-for-python) | `12.28.0` | `12.31.0` |\n| [azure-storage-file-share](https://github.com/Azure/azure-sdk-for-python) | `12.19.0` | `12.27.0` |\n| [box-sdk-gen](https://github.com/box/box-python-sdk-gen) | `1.12.0` | `1.17.0` |\n| [celery](https://github.com/celery/celery) | `5.4.0` | `5.6.3` |\n| [confluent-kafka](https://github.com/confluentinc/confluent-kafka-python) | `2.8.0` | `2.16.0` |\n| [cryptography](https://github.com/pyca/cryptography) | `50.0.0` | `50.0.2` |\n| [curl-cffi](https://github.com/lexiforest/curl_cffi) | `0.15.0` | `0.16.3` |\n| [dependency-injector](https://github.com/ets-labs/python-dependency-injector) | `4.44.0` | `4.49.1` |\n| [discord-py](https://github.com/Rapptz/discord.py) | `2.6.3` | `2.7.1` |\n| [dropbox](https://github.com/dropbox/dropbox-sdk-python) | `12.0.2` | `12.2.3` |\n| [docx2python](https://github.com/ShayHill/docx2python) | `3.5.0` | `3.7.1` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.3` | `0.159.1` |\n| [starlette](https://github.com/Kludex/starlette) | `1.7.0` | `1.9.0` |\n| [feedparser](https://github.com/kurtmckee/feedparser) | `6.0.12` | `6.0.14` |\n| [trafilatura](https://github.com/adbar/trafilatura) | `2.0.0` | `2.3.1` |\n| [markdownify](https://github.com/matthewwithanm/python-markdownify) | `1.2.2` | `1.2.3` |\n| [google-api-python-client](https://github.com/googleapis/google-api-python-client) | `2.161.0` | `2.201.0` |\n| [google-auth-oauthlib](https://github.com/googleapis/google-cloud-python) | `1.2.1` | `1.5.0` |\n| [jsonschema](https://github.com/python-jsonschema/jsonschema) | `4.23.0` | `4.26.0` |\n| [langchain-anthropic](https://github.com/langchain-ai/langchain) | `1.4.6` | `1.7.6` |\n| [langchain-aws](https://github.com/langchain-ai/langchain-aws) | `1.1.0` | `1.9.0` |\n| [langchain-cohere](https://github.com/langchain-ai/langchain-cohere) | `0.5.0` | `0.6.0` |\n| [langchain-community](https://github.com/langchain-ai/langchain-community) | `0.4.1` | `0.4.2` |\n| [langchain-experimental](https://github.com/langchain-ai/langchain-experimental) | `0.4.0` | `0.4.2` |\n| [langchain-fireworks](https://github.com/langchain-ai/langchain) | `1.1.0` | `1.7.1` |\n| [langchain-groq](https://github.com/langchain-ai/langchain) | `1.1.0` | `1.1.3` |\n| [langchain-ollama](https://github.com/langchain-ai/langchain) | `1.0.0` | `1.1.0` |\n| [langchain-openai](https://github.com/langchain-ai/langchain) | `1.1.14` | `1.7.2` |\n| [langchain-voyageai](https://github.com/langchain-ai/langchain) | `0.3.0` | `0.4.1` |\n| [langchain-xai](https://github.com/langchain-ai/langchain) | `1.1.0` | `1.3.0` |\n| [langchain](https://github.com/langchain-ai/langchain) | `1.3.9` | `1.4.7` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.8.1` | `3.11.2` |\n| [monday-api-python-sdk](https://github.com/mondaycom/monday-api-python-sdk) | `1.6.5` | `1.6.8` |\n| [msgspec](https://github.com/msgspec/msgspec) | `0.20.0` | `0.22.0` |\n| [msgraph-sdk](https://github.com/microsoftgraph/msgraph-sdk-python) | `1.16.0` | `1.64.0` |\n| [nats-py](https://github.com/nats-io/nats.py) | `2.1.0` | `2.16.0` |\n| [numpy](https://github.com/numpy/numpy) | `2.3.2` | `2.5.4` |\n| [opik](https://github.com/comet-ml/opik) | `2.2.99` | `2.2.115` |\n| [pdfplumber](https://github.com/jsvine/pdfplumber) | `0.11.9` | `0.11.10` |\n| [pillow-avif-plugin](https://github.com/fdintino/pillow-avif-plugin) | `1.5.5` | `1.6.0` |\n| [prometheus-client](https://github.com/prometheus/client_python) | `0.21.1` | `0.26.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.14.1` |\n| [python-arango](https://github.com/arangodb/python-arango) | `8.1.5` | `8.3.6` |\n| [pymongo](https://github.com/mongodb/mongo-python-driver) | `4.18.2` | `4.19.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.4` |\n| [redshift-connector](https://github.com/aws/amazon-redshift-python-driver) | `2.1.17` | `2.2.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.31` | `0.0.32` |\n| [qdrant-client](https://github.com/qdrant/qdrant-client) | `1.13.1` | `1.20.0` |\n| [transformers](https://github.com/huggingface/transformers) | `5.18.0` | `5.20.2` |\n| [slack-sdk](https://github.com/slackapi/python-slack-sdk) | `3.27.0` | `3.45.0` |\n| [thrift](http://thrift.apache.org) | `0.24.0` | `0.25.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.37.0` | `0.54.0` |\n\n\nUpdates `pytest` from 9.0.3 to 9.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.1.1\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.1 (2026-06-19)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e: Fixed a logic bug in \u003ccode\u003epytest.RaisesGroup\u003c/code\u003e which would might cause it to display incorrect \u0026quot;It matches \u003c!-- raw HTML omitted --\u003eFooError()\u003c!-- raw HTML omitted --\u003e which was paired with \u003c!-- raw HTML omitted --\u003eBarError\u003c!-- raw HTML omitted --\u003e\u0026quot; messages.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14591\"\u003e#14591\u003c/a\u003e: Fixed a regression in pytest 9.1.0 which caused overriding a parametrized fixture with an indirect \u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/pytest\"\u003e\u003ccode\u003e@​pytest\u003c/code\u003e\u003c/a\u003e.mark.parametrize\u003c!-- raw HTML omitted --\u003e to fail with \u0026quot;duplicate parametrization of '\u0026lt;fixture name\u0026gt;'\u0026quot;.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14606\"\u003e#14606\u003c/a\u003e: Fixed \u003ccode\u003elist-item\u003c/code\u003e typing errors from mypy in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e \u003ccode\u003eargvalues\u003c/code\u003e parameter.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14608\"\u003e#14608\u003c/a\u003e: Fixed a regression in pytest 9.1.0 where \u003ccode\u003econftest.py\u003c/code\u003e files located in \u003ccode\u003e\u0026lt;invocation dir\u0026gt;/test*\u003c/code\u003e were no longer loaded as initial conftests when invoked without arguments.\nThis could cause certain hooks (like \u003ccode\u003epytest_addoption\u003c/code\u003e) in these files to not fire.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e9.1.0\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.0 (2026-06-13)\u003c/h1\u003e\n\u003ch2\u003eRemovals and backward incompatible breaking changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14533\"\u003e#14533\u003c/a\u003e: When using \u003ccode\u003e--doctest-modules\u003c/code\u003e, autouse fixtures with \u003ccode\u003emodule\u003c/code\u003e, \u003ccode\u003epackage\u003c/code\u003e or \u003ccode\u003esession\u003c/code\u003e scope that are defined inline in Python test modules (not plugins or conftests) will now possibly execute twice.\u003c/p\u003e\n\u003cp\u003eIf this is undesirable, move the fixture definition to a \u003ccode\u003econftest.py\u003c/code\u003e file if possible.\u003c/p\u003e\n\u003cp\u003eTechnical explanation for those interested:\nWhen using \u003c!-- raw HTML omitted --\u003e--doctest-modules\u003c!-- raw HTML omitted --\u003e, pytest possibly collects Python modules twice, once as \u003ccode\u003epytest.Module\u003c/code\u003e and once as a \u003ccode\u003eDoctestModule\u003c/code\u003e (depending on the configuration).\nDue to improvements in pytest's fixture implementation, if e.g. the \u003ccode\u003eDoctestModule\u003c/code\u003e collects a fixture, it is now visible to it only, and not to the \u003ccode\u003eModule\u003c/code\u003e.\nThis means that both need to register the fixtures independently.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations (removal in next major release)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/10819\"\u003e#10819\u003c/a\u003e: Added a deprecation warning for class-scoped fixtures defined as instance methods (without \u003ccode\u003e@classmethod\u003c/code\u003e). Such fixtures set attributes on a different instance than the test methods use, leading to unexpected behavior. Use \u003ccode\u003e@classmethod\u003c/code\u003e decorator instead -- by \u003ccode\u003eyastcher\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003e10819\u003c/code\u003e and \u003ccode\u003e14011\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12882\"\u003e#12882\u003c/a\u003e: Calling \u003ccode\u003erequest.getfixturevalue() \u0026lt;pytest.FixtureRequest.getfixturevalue\u0026gt;\u003c/code\u003e during teardown to request a fixture that was not already requested is now deprecated and will become an error in pytest 10.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003edynamic-fixture-request-during-teardown\u003c/code\u003e for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13409\"\u003e#13409\u003c/a\u003e: Using non-\u003ccode\u003e~collections.abc.Collection\u003c/code\u003e iterables (such as generators, iterators, or custom iterable objects) for the \u003ccode\u003eargvalues\u003c/code\u003e parameter in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e and \u003ccode\u003emetafunc.parametrize \u0026lt;pytest.Metafunc.parametrize\u0026gt;\u003c/code\u003e is now deprecated.\u003c/p\u003e\n\u003cp\u003eThese iterables get exhausted after the first iteration,\nleading to tests getting unexpectedly skipped in cases such as running \u003ccode\u003epytest.main()\u003c/code\u003e multiple times,\nusing class-level parametrize decorators,\nor collecting tests multiple times.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003eparametrize-iterators\u003c/code\u003e for details and suggestions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13946\"\u003e#13946\u003c/a\u003e: The private \u003ccode\u003econfig.inicfg\u003c/code\u003e attribute is now deprecated.\nUse \u003ccode\u003econfig.getini() \u0026lt;pytest.Config.getini\u0026gt;\u003c/code\u003e to access configuration values instead.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003econfig-inicfg\u003c/code\u003e for more details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14004\"\u003e#14004\u003c/a\u003e: Passing \u003ccode\u003ebaseid\u003c/code\u003e to \u003ccode\u003e~pytest.FixtureDef\u003c/code\u003e or \u003ccode\u003enodeid\u003c/code\u003e strings to fixture registration APIs is now deprecated. These are internal pytest APIs that are used by some plugins.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/cf470ec0bf7eb89cd97dd56df4859eae5db46447\"\u003e\u003ccode\u003ecf470ec\u003c/code\u003e\u003c/a\u003e Prepare release version 9.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/e0c8ce6cc5db1f08363be6f152c32e6838df2690\"\u003e\u003ccode\u003ee0c8ce6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14625\"\u003e#14625\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/a07c31a97...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/1b82d1694fce22385ee7a4287917fbafbaf2e757\"\u003e\u003ccode\u003e1b82d16\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14624\"\u003e#14624\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/b375b79ec...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/501c4bc784da3b08bfcaa64858eba5d15dc59e53\"\u003e\u003ccode\u003e501c4bc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14596\"\u003e#14596\u003c/a\u003e from bluetech/doc-classmethod\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b61f588e36e9377c3d1d3f06bece1da0fc31d9ca\"\u003e\u003ccode\u003eb61f588\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14622\"\u003e#14622\u003c/a\u003e from chrisburr/fix-14608-initial-conftest-test-subdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/9a567e009f4d2da3ce1721c6db3109cb5744d40a\"\u003e\u003ccode\u003e9a567e0\u003c/code\u003e\u003c/a\u003e [automated] Update plugin list (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14617\"\u003e#14617\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14618\"\u003e#14618\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ef8b2993e5b48639e4a3d97d0525df9760781384\"\u003e\u003ccode\u003eef8b299\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14620\"\u003e#14620\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/680f9f3ed...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/66abd0784d4cb7c1ba44ab9a8896506cd4985acc\"\u003e\u003ccode\u003e66abd07\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e from bysiber/fix-stale-iexp-raisesgroup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/79fbf93b666cac5f27c9dad047943d47b766c8d5\"\u003e\u003ccode\u003e79fbf93\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14612\"\u003e#14612\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/974ed48b6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/0d312eb876177e9f1c04262b54060a41034ebf5c\"\u003e\u003ccode\u003e0d312eb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14611\"\u003e#14611\u003c/a\u003e from bluetech/parametrize-argvalues-typing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.0.3...9.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 1.3.0 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/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio v1.4.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.4.0\"\u003e1.4.0\u003c/a\u003e - 2026-05-26\u003c/h1\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOverriding the \u003cem\u003eevent_loop_policy\u003c/em\u003e fixture is deprecated. Use the \u003ccode\u003epytest_asyncio_loop_factories\u003c/code\u003e hook instead. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1419\"\u003e#1419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003epytest_asyncio_loop_factories\u003c/code\u003e hook to parametrize asyncio tests with custom event loop factories.\u003c/p\u003e\n\u003cp\u003eThe hook returns a mapping of factory names to loop factories, and \u003ccode\u003epytest.mark.asyncio(loop_factories=[...])\u003c/code\u003e selects a subset of configured factories per test. When a single factory is configured, test names are unchanged.\u003c/p\u003e\n\u003cp\u003eSynchronous \u003ccode\u003e@pytest_asyncio.fixture\u003c/code\u003e functions now see the correct event loop when custom loop factories are configured, even when test code disrupts the current event loop (e.g., via \u003ccode\u003easyncio.run()\u003c/code\u003e or \u003ccode\u003easyncio.set_event_loop(None)\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1164\"\u003e#1164\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImproved the readability of the warning message that is displayed when \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e is unset (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1298\"\u003e#1298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eOnly import \u003ccode\u003easyncio.AbstractEventLoopPolicy\u003c/code\u003e for type checking to avoid raising\na DeprecationWarning. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1394\"\u003e#1394\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdated minimum supported pytest version to v8.4.0. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1397\"\u003e#1397\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a \u003ccode\u003eResourceWarning: unclosed event loop\u003c/code\u003e warning that could occur when a synchronous test called \u003ccode\u003easyncio.run()\u003c/code\u003e or otherwise unset the current event loop after pytest-asyncio had run an async test or fixture. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dependency on \u003ccode\u003esphinx-tabs \u0026gt;= 3.5\u003c/code\u003e to organize documentation examples into tabs. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1395\"\u003e#1395\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio v1.4.0a2\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.4.0a2\"\u003e1.4.0a2\u003c/a\u003e - 2026-05-02\u003c/h1\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOverriding the \u003cem\u003eevent_loop_policy\u003c/em\u003e fixture is deprecated. Use the \u003ccode\u003epytest_asyncio_loop_factories\u003c/code\u003e hook instead. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1419\"\u003e#1419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003epytest_asyncio_loop_factories\u003c/code\u003e hook to parametrize asyncio tests with custom event loop factories.\u003c/p\u003e\n\u003cp\u003eThe hook returns a mapping of factory names to loop factories, and \u003ccode\u003epytest.mark.asyncio(loop_factories=[...])\u003c/code\u003e selects a subset of configured factories per test. When a single factory is configured, test names are unchanged on pytest 8.4+.\u003c/p\u003e\n\u003cp\u003eSynchronous \u003ccode\u003e@pytest_asyncio.fixture\u003c/code\u003e functions now see the correct event loop when custom loop factories are configured, even when test code disrupts the current event loop (e.g., via \u003ccode\u003easyncio.run()\u003c/code\u003e or \u003ccode\u003easyncio.set_event_loop(None)\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1164\"\u003e#1164\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImproved the readability of the warning message that is displayed when \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e is unset (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1298\"\u003e#1298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eOnly import \u003ccode\u003easyncio.AbstractEventLoopPolicy\u003c/code\u003e for type checking to avoid raising\na DeprecationWarning. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1394\"\u003e#1394\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/pytest-dev/pytest-asyncio/commit/6e14cd2af9292dca1fa2b027a06bbc40b0e0e425\"\u003e\u003ccode\u003e6e14cd2\u003c/code\u003e\u003c/a\u003e chore: Prepare release of v1.4.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4b900fb5d0c30949c574e55dd904ee179f858a5e\"\u003e\u003ccode\u003e4b900fb\u003c/code\u003e\u003c/a\u003e Build(deps): Bump codecov/codecov-action from 6.0.0 to 6.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ab9f63245094865c42c940a34af724b0dec1debf\"\u003e\u003ccode\u003eab9f632\u003c/code\u003e\u003c/a\u003e Build(deps): Bump zipp from 3.23.1 to 4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a56fc77ecd59f781d8471b0f6a82bf58e08c95fa\"\u003e\u003ccode\u003ea56fc77\u003c/code\u003e\u003c/a\u003e Build(deps): Bump hypothesis from 6.152.6 to 6.152.8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/e8bae9bc1f197731fc1a210c0da557af7b698e6d\"\u003e\u003ccode\u003ee8bae9b\u003c/code\u003e\u003c/a\u003e Build(deps): Bump requests from 2.34.0 to 2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/fc433402c570fd36a7a227ef4bc3abd4579299de\"\u003e\u003ccode\u003efc43340\u003c/code\u003e\u003c/a\u003e Build(deps): Bump idna from 3.14 to 3.15\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/762eaf5033b798b965c92afdbb2cebefa8fc3a8b\"\u003e\u003ccode\u003e762eaf5\u003c/code\u003e\u003c/a\u003e Build(deps): Bump jaraco-functools from 4.4.0 to 4.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/b62e2228c80070977baf6b77ba89d5c148af920f\"\u003e\u003ccode\u003eb62e222\u003c/code\u003e\u003c/a\u003e Build(deps): Bump click from 8.3.3 to 8.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/919044700627889d25ca63b6e7a3bc785f3137eb\"\u003e\u003ccode\u003e9190447\u003c/code\u003e\u003c/a\u003e Build(deps): Bump pydantic from 2.13.3 to 2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/82a393c5e31b6ebbbd8ec2a8dafc5f35b9cf1236\"\u003e\u003ccode\u003e82a393c\u003c/code\u003e\u003c/a\u003e ci: Remove unnecessary debug output.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v1.3.0...v1.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-order` from 1.3.0 to 1.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-order/releases\"\u003epytest-order's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-order 1.5.0\u003c/h2\u003e\n\u003cp\u003eAdds option \u003ccode\u003e--fail-all-on-failed-ordering\u003c/code\u003e to abort tests after a failed ordering (see \u003ca href=\"https://github.com/pytest-dev/pytest-order/blob/version-1.5/CHANGELOG.md#version-150-2026-06-13\"\u003eRelease Notes\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003epytest-order 1.4.0\u003c/h2\u003e\n\u003cp\u003eAllows the plugin to run after \u003ccode\u003e--failed-first\u003c/code\u003e and similar options.\nCheck the \u003ca href=\"https://github.com/pytest-dev/pytest-order/blob/version-1.4/CHANGELOG.md#version-140-2026-04-26\"\u003erelease notes\u003c/a\u003e for all changes.\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/pytest-dev/pytest-order/blob/main/CHANGELOG.md\"\u003epytest-order's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://pypi.org/project/pytest-order/1.5.0/\"\u003eVersion 1.5.0\u003c/a\u003e (2026-06-13)\u003c/h2\u003e\n\u003cp\u003eAdds option to abort tests after a failed ordering.\u003c/p\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadded option \u003ccode\u003e--fail-all-on-failed-ordering\u003c/code\u003e to abort the whole test run\nwithout executing any tests if some tests could not be ordered\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003etransitive relative chains are resolved as a single globally consistent order\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://pypi.org/project/pytest-order/1.4.0/\"\u003eVersion 1.4.0\u003c/a\u003e (2026-04-26)\u003c/h2\u003e\n\u003cp\u003eAllows the plugin to run after \u003ccode\u003e--failed-first\u003c/code\u003e and similar options.\u003c/p\u003e\n\u003ch3\u003eChanges\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremoved official support for Python 3.7-3.9 (EOL), added Python 3.13 and 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadded option \u003ccode\u003e--order-after-ff\u003c/code\u003e, that allows to run \u003ccode\u003epytest-order\u003c/code\u003e after built-in hooks\nlike the \u003ccode\u003e--failed-first\u003c/code\u003e option  (see \u003ca href=\"https://redirect.github.com/pytest-dev/pytest-order/issues/234\"\u003e#234\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInfrastructure\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euse trusted publisher for release (see \u003ca href=\"https://docs.pypi.org/trusted-publishers/\"\u003ehttps://docs.pypi.org/trusted-publishers/\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euse \u003ccode\u003epyproject.toml\u003c/code\u003e for project setup\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euse a theme for documentation supporting dark mode\u003c/li\u003e\n\u003cli\u003eadded use case for ordering test modules (see \u003ca href=\"https://redirect.github.com/pytest-dev/pytest-order/issues/51\"\u003e#51\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efixed documentation for \u003ccode\u003e--indulgent-ordering\u003c/code\u003e option\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/725547ff472b2db7362cef277eea2e86aa7041f8\"\u003e\u003ccode\u003e725547f\u003c/code\u003e\u003c/a\u003e Release 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/43e076997b52f009288baafed7c390104b68743b\"\u003e\u003ccode\u003e43e0769\u003c/code\u003e\u003c/a\u003e Implement --fail-all-on-failed-ordering (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-order/issues/246\"\u003e#246\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/c411fc8d3daaf85a1c3de678f28b895de919ab69\"\u003e\u003ccode\u003ec411fc8\u003c/code\u003e\u003c/a\u003e Fix relative ordering in complex transitive cases (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-order/issues/242\"\u003e#242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/5a6726987e7ce56fb8bb6d46bb91469177576fd5\"\u003e\u003ccode\u003e5a67269\u003c/code\u003e\u003c/a\u003e Bump codecov/codecov-action from 6 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/ce06e5ddee44eb72ddb30ae7185b2592644053a6\"\u003e\u003ccode\u003ece06e5d\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/14488047df88b380efa6031dc806f2c46cba3c00\"\u003e\u003ccode\u003e1448804\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/e8c9af00150c14c36d74b8baa8d9b9e5a8c22795\"\u003e\u003ccode\u003ee8c9af0\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/4b028bc0c434369c09b6b78cc14a6647dec1585a\"\u003e\u003ccode\u003e4b028bc\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/5d57cd7656ab0f04a9076e6fb689fd4cbab894f3\"\u003e\u003ccode\u003e5d57cd7\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/3ec2e30f39fe67f53356c656270315f9e414820e\"\u003e\u003ccode\u003e3ec2e30\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-order/compare/v1.3.0...v1.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `aiohttp` from 3.14.4 to 3.14.5\nUpdates `aiokafka` from 0.12.0 to 0.14.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/aio-libs/aiokafka/releases\"\u003eaiokafka's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.14.0\u003c/h2\u003e\n\u003cp\u003eNew features:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd rack-aware fetching from the closest in-sync replica (KIP-392) via the new\n\u003ccode\u003eclient_rack\u003c/code\u003e option on :class:\u003ccode\u003eAIOKafkaConsumer\u003c/code\u003e. When set and the brokers\nsupport \u003ccode\u003eFetchRequest v11\u003c/code\u003e (Kafka 2.4+) with a \u003ccode\u003ereplica.selector.class\u003c/code\u003e\nconfigured, the consumer will fetch from a same-rack follower instead of the\npartition leader, reducing cross-AZ traffic and tail latency.\n(prs \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1159\"\u003e#1159\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1160\"\u003e#1160\u003c/a\u003e by \u003ca href=\"https://github.com/GlebShipilov\"\u003e\u003ccode\u003e@​GlebShipilov\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBugfixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix type annotation for \u003ccode\u003eAIOKafkaAdminClient\u003c/code\u003e (issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1148\"\u003e#1148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn back and deprecate \u003ccode\u003eapi_version\u003c/code\u003e parameter in client classes\n(issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1147\"\u003e#1147\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid failures when a transaction coordinator is dead by removing deprecated code\n(issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1151\"\u003e#1151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProperly manage batch max size and linger_ms. A batch will be always\nproduced if the max size or the lingering time is reached\n(pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1142\"\u003e#1142\u003c/a\u003e by \u003ca href=\"https://github.com/vmaurin\"\u003e\u003ccode\u003e@​vmaurin\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.14.0b1\u003c/h2\u003e\n\u003cp\u003eNew features:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd rack-aware fetching from the closest in-sync replica (KIP-392) via the new\n\u003ccode\u003eclient_rack\u003c/code\u003e option on :class:\u003ccode\u003eAIOKafkaConsumer\u003c/code\u003e. When set and the brokers\nsupport \u003ccode\u003eFetchRequest v11\u003c/code\u003e (Kafka 2.4+) with a \u003ccode\u003ereplica.selector.class\u003c/code\u003e\nconfigured, the consumer will fetch from a same-rack follower instead of the\npartition leader, reducing cross-AZ traffic and tail latency.\n(prs \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1159\"\u003e#1159\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1160\"\u003e#1160\u003c/a\u003e by \u003ca href=\"https://github.com/GlebShipilov\"\u003e\u003ccode\u003e@​GlebShipilov\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBugfixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix type annotation for \u003ccode\u003eAIOKafkaAdminClient\u003c/code\u003e (issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1148\"\u003e#1148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn back and deprecate \u003ccode\u003eapi_version\u003c/code\u003e parameter in client classes\n(issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1147\"\u003e#1147\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid failures when a transaction coordinator is dead by removing deprecated code\n(issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1151\"\u003e#1151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProperly manage batch max size and linger_ms. A batch will be always\nproduced if the max size or the lingering time is reached\n(pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1142\"\u003e#1142\u003c/a\u003e by \u003ca href=\"https://github.com/vmaurin\"\u003e\u003ccode\u003e@​vmaurin\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.13.0\u003c/h2\u003e\n\u003cp\u003eBreaking changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eResolve API versions at connection with brokers\n\u003ccode\u003eapi_version\u003c/code\u003e parameter has been removed from the different clients (admin/consumer/producer)\n(pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1136\"\u003e#1136\u003c/a\u003e by \u003ca href=\"https://github.com/vmaurin\"\u003e\u003ccode\u003e@​vmaurin\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eImproved Documentation:\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/aio-libs/aiokafka/blob/master/CHANGES.rst\"\u003eaiokafka's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e0.14.0 (2026-04-29)\u003c/h1\u003e\n\u003cp\u003eNew features:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd rack-aware fetching from the closest in-sync replica (KIP-392) via the new\n\u003ccode\u003eclient_rack\u003c/code\u003e option on :class:\u003ccode\u003eAIOKafkaConsumer\u003c/code\u003e. When set and the brokers\nsupport \u003ccode\u003eFetchRequest v11\u003c/code\u003e (Kafka 2.4+) with a \u003ccode\u003ereplica.selector.class\u003c/code\u003e\nconfigured, the consumer will fetch from a same-rack follower instead of the\npartition leader, reducing cross-AZ traffic and tail latency.\n(prs \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1159\"\u003e#1159\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1160\"\u003e#1160\u003c/a\u003e by \u003ca href=\"https://github.com/GlebShipilov\"\u003e\u003ccode\u003e@​GlebShipilov\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBugfixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix type annotation for \u003ccode\u003eAIOKafkaAdminClient\u003c/code\u003e (issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1148\"\u003e#1148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn back and deprecate \u003ccode\u003eapi_version\u003c/code\u003e parameter in client classes\n(issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1147\"\u003e#1147\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid failures when a transaction coordinator is dead by removing deprecated code\n(issue \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1151\"\u003e#1151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProperly manage batch max size and linger_ms. A batch will be always\nproduced if the max size or the lingering time is reached\n(pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1142\"\u003e#1142\u003c/a\u003e by \u003ca href=\"https://github.com/vmaurin\"\u003e\u003ccode\u003e@​vmaurin\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.13.0 (2026-01-02)\u003c/h1\u003e\n\u003cp\u003eBreaking changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eResolve API versions at connection with brokers\n\u003ccode\u003eapi_version\u003c/code\u003e parameter has been removed from the different clients (admin/consumer/producer)\n(pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1136\"\u003e#1136\u003c/a\u003e by \u003ca href=\"https://github.com/vmaurin\"\u003e\u003ccode\u003e@​vmaurin\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eImproved Documentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix incomplete documentation for \u003ccode\u003eAIOKafkaConsumer.offset_for_times\u003c/code\u003e\n(pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1068\"\u003e#1068\u003c/a\u003e by \u003ca href=\"https://github.com/jzvandenoever\"\u003e\u003ccode\u003e@​jzvandenoever\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Java Client API reference (pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1069\"\u003e#1069\u003c/a\u003e by \u003ca href=\"https://github.com/emmanuel-ferdman\"\u003e\u003ccode\u003e@​emmanuel-ferdman\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBugfixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake KafkaStorageError retriable after metadata refresh like in other\nimplementations (pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1115\"\u003e#1115\u003c/a\u003e by \u003ca href=\"https://github.com/omerhadari\"\u003e\u003ccode\u003e@​omerhadari\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure the transaction coordinator is refreshed after broker fail‑over,\nso transactional producers resume once a new coordinator is elected.\n(pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1135\"\u003e#1135\u003c/a\u003e by \u003ca href=\"https://github.com/vmaurin\"\u003e\u003ccode\u003e@​vmaurin\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRename the RequestHeader version classes to match official version\nschemas (pr \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1141\"\u003e#1141\u003c/a\u003e by \u003ca href=\"https://github.com/vmaurin\"\u003e\u003ccode\u003e@​vmaurin\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/aio-libs/aiokafka/commit/672947afe85c91b7d953f0259e69837a711d3246\"\u003e\u003ccode\u003e672947a\u003c/code\u003e\u003c/a\u003e Prepare 0.14.0 final release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/de7ec7e3ee9620046be994f062d690b09136d01b\"\u003e\u003ccode\u003ede7ec7e\u003c/code\u003e\u003c/a\u003e Prepare 0.14.0b1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/7d331e0fe948a022cddeb6f1ea2da94fbeaa39a2\"\u003e\u003ccode\u003e7d331e0\u003c/code\u003e\u003c/a\u003e Fix last_stable_offset parsing for FetchResponse v5..v10 (\u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1160\"\u003e#1160\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/00b099f0caa9009f9774c1c1869bbdf38de6d4bd\"\u003e\u003ccode\u003e00b099f\u003c/code\u003e\u003c/a\u003e Improve test_kip_345_disabled to debug flakiness\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/57fa87056f09f344d23a190513d7a7f2c599fc9a\"\u003e\u003ccode\u003e57fa870\u003c/code\u003e\u003c/a\u003e Client rack support (\u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1159\"\u003e#1159\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/870a52fda23fad79a92b5917239a9a33fcc72006\"\u003e\u003ccode\u003e870a52f\u003c/code\u003e\u003c/a\u003e Use linger_ms to delay batches (\u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1142\"\u003e#1142\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/cadc5e02d51440dc5dc89a597a17ee64bc0c0837\"\u003e\u003ccode\u003ecadc5e0\u003c/code\u003e\u003c/a\u003e Issue 1151 cleanup (\u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1153\"\u003e#1153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/19b28fed72e422fac72fcedc8db9d224b8c67ae2\"\u003e\u003ccode\u003e19b28fe\u003c/code\u003e\u003c/a\u003e Return and deprecate api_version (fixes \u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1147\"\u003e#1147\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1150\"\u003e#1150\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/52d440fb5a93a4dd2e0738715ed39c34d97d23e9\"\u003e\u003ccode\u003e52d440f\u003c/code\u003e\u003c/a\u003e Fix AIOKafkaAdminClient annotation (\u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1148\"\u003e#1148\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/aio-libs/aiokafka/issues/1149\"\u003e#1149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiokafka/commit/3b7ccd0fff5c92a9cf12c12e361370082ad12b0c\"\u003e\u003ccode\u003e3b7ccd0\u003c/code\u003e\u003c/a\u003e Prepare 0.13.0 release\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/aio-libs/aiokafka/compare/v0.12.0...v0.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `aiolimiter` from 1.2.1 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/mjpieters/aiolimiter/releases\"\u003eaiolimiter's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eAiolimiter 1.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTightened boundary checks for the \u003ccode\u003eamount\u003c/code\u003e argument to \u003ccode\u003eAsyncLimiter.acquire()\u003c/code\u003e, rejecting values outside the 0 to \u003ccode\u003emax_rate\u003c/code\u003e range. Negative values and \u003ccode\u003eNaN\u003c/code\u003e are no longer accepted. (\u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/760\"\u003e#760\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/313\"\u003e#313\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/655\"\u003e#655\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/mjpieters/aiolimiter/blob/main/CHANGELOG.md\"\u003eaiolimiter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eaiolimiter 1.3.0 (2026-09-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTightened boundary checks for the \u003ccode\u003eamount\u003c/code\u003e argument to \u003ccode\u003eAsyncLimiter.acquire()\u003c/code\u003e, rejecting values outside the 0 to \u003ccode\u003emax_rate\u003c/code\u003e range. Negative values and \u003ccode\u003eNaN\u003c/code\u003e are no longer accepted. (\u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/760\"\u003e#760\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/313\"\u003e#313\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/655\"\u003e#655\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/mjpieters/aiolimiter/commit/f7df2d7ff4be2d2b64bb2cbf2340e5a8a28d988d\"\u003e\u003ccode\u003ef7df2d7\u003c/code\u003e\u003c/a\u003e ci: Address release process issues\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/be2530b0352d2382b71e6490b948356904543952\"\u003e\u003ccode\u003ebe2530b\u003c/code\u003e\u003c/a\u003e chore: fix sdist packaging\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/252b97ff8819e1ea3ffb79c676286feb0970c79e\"\u003e\u003ccode\u003e252b97f\u003c/code\u003e\u003c/a\u003e ci: unbreak prek step during releases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/ee7f6efcd0ef8c15282e66bddda9871331585807\"\u003e\u003ccode\u003eee7f6ef\u003c/code\u003e\u003c/a\u003e Release v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/697643f8b768c63ade9777004b130d5203329297\"\u003e\u003ccode\u003e697643f\u003c/code\u003e\u003c/a\u003e feat: Reject negative and NaN acquisition amounts (\u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/760\"\u003e#760\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/8438f6f458e2e00f9d3313f707af9c7abe2deb8f\"\u003e\u003ccode\u003e8438f6f\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/8ed24d146a52a961303db8b5c13691f0b4eaf212\"\u003e\u003ccode\u003e8ed24d1\u003c/code\u003e\u003c/a\u003e chore(deps): update pre-commit hook renovatebot/pre-commit-hooks to v44.65.5 ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/4c57d27f05d92f66ea4e961ff661d525db46e6b4\"\u003e\u003ccode\u003e4c57d27\u003c/code\u003e\u003c/a\u003e chore(deps): update pre-commit updates (\u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/759\"\u003e#759\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/6c2f96d316db42b20e0ccc7a9bf537e575cfee7e\"\u003e\u003ccode\u003e6c2f96d\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency towncrier to v26\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mjpieters/aiolimiter/commit/279fdb7780226444c2dd0f71807d45ffcd86a82d\"\u003e\u003ccode\u003e279fdb7\u003c/code\u003e\u003c/a\u003e chore(deps): update pre-commit updates (\u003ca href=\"https://redirect.github.com/mjpieters/aiolimiter/issues/757\"\u003e#757\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mjpieters/aiolimiter/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 `azure-storage-blob` from 12.28.0 to 12.31.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Azure/azure-sdk-for-python/releases\"\u003eazure-storage-blob's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eazure-storage-blob_12.31.0\u003c/h2\u003e\n\u003ch2\u003e12.31.0 (2026-09-30)\u003c/h2\u003e\n\u003cp\u003eThis version and all future versions will require Python 3.10+. Python 3.9 is no longer supported.\u003c/p\u003e\n\u003ch3\u003eFeatures Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStable release of features from 12.31.0b1\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003elist\u003c/code\u003e support to \u003ccode\u003eBlobSasPermissions\u003c/code\u003e for use with directory-scoped SAS tokens.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBugs Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where \u003ccode\u003edestination_snapshot\u003c/code\u003e on a blob's copy properties was always \u003ccode\u003eNone\u003c/code\u003e when listing blobs with \u003ccode\u003eresponse_format=\u0026quot;arrow\u0026quot;\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/Azure/azure-sdk-for-python/commit/0be331280690003e4527b5ee68730be23fa563f0\"\u003e\u003ccode\u003e0be3312\u003c/code\u003e\u003c/a\u003e 2026-09-29 -\u0026gt; 2026-09-30 changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/9c0768f332fcd7c83813defe9dd00ceec938086b\"\u003e\u003ccode\u003e9c0768f\u003c/code\u003e\u003c/a\u003e [Storage] Prep for STG104 GA Release (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49263\"\u003e#49263\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/a124f0e97510ff14639ad0413ec9c0f4d7ff5641\"\u003e\u003ccode\u003ea124f0e\u003c/code\u003e\u003c/a\u003e [Storage] Add 12.30.3 bug fix to release branch (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49140\"\u003e#49140\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/329cc23c9c8022c25ad511a6b7b26d0baf9544dd\"\u003e\u003ccode\u003e329cc23\u003c/code\u003e\u003c/a\u003e reject headers with \\r or \\n (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49070\"\u003e#49070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/7e753be3785598a125b29d4323ab23e6e6c25461\"\u003e\u003ccode\u003e7e753be\u003c/code\u003e\u003c/a\u003e [Storage] Prepare STG 104 GA release (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48791\"\u003e#48791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/9733992e6b9f59e40e7fcd5ce857e9478e222686\"\u003e\u003ccode\u003e9733992\u003c/code\u003e\u003c/a\u003e [Storage] Update main CHANGELOG after patch (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48783\"\u003e#48783\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/bdef02fe0231c418cfd25e04a9e97a213def8b62\"\u003e\u003ccode\u003ebdef02f\u003c/code\u003e\u003c/a\u003e added headers to redirect cleanup logic (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48771\"\u003e#48771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/f020094e6329f96bffab1b07d96fd5a74eb324b1\"\u003e\u003ccode\u003ef020094\u003c/code\u003e\u003c/a\u003e [Storage] Mark rehydrate to smart tier tests as playback (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48712\"\u003e#48712\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/65d40b853d5bbae84dbdfb718ce03cf47f8e6fa7\"\u003e\u003ccode\u003e65d40b8\u003c/code\u003e\u003c/a\u003e fixed sample error (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48687\"\u003e#48687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/8c46d454d40637fe95a8d1ba829be901fbfd13af\"\u003e\u003ccode\u003e8c46d45\u003c/code\u003e\u003c/a\u003e [Storage] Detect region reorder during Blob decryption (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48559\"\u003e#48559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Azure/azure-sdk-for-python/compare/azure-storage-blob_12.28.0...azure-storage-blob_12.31.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `azure-storage-file-share` from 12.19.0 to 12.27.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Azure/azure-sdk-for-python/releases\"\u003eazure-storage-file-share's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eazure-storage-file-share_12.27.0\u003c/h2\u003e\n\u003ch2\u003e12.27.0 (2026-09-30)\u003c/h2\u003e\n\u003cp\u003eThis version and all future versions will require Python 3.10+. Python 3.9 is no longer supported.\u003c/p\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCustom transports that use legacy \u003ccode\u003eazure-core\u003c/code\u003e Request/Response types will no longer be supported and may now cause errors if used. Please ensure custom transports are utilizing types from \u003ccode\u003eazure.core.rest\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStable release of features from 12.27.0b1\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/0be331280690003e4527b5ee68730be23fa563f0\"\u003e\u003ccode\u003e0be3312\u003c/code\u003e\u003c/a\u003e 2026-09-29 -\u0026gt; 2026-09-30 changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/9c0768f332fcd7c83813defe9dd00ceec938086b\"\u003e\u003ccode\u003e9c0768f\u003c/code\u003e\u003c/a\u003e [Storage] Prep for STG104 GA Release (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49263\"\u003e#49263\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/a124f0e97510ff14639ad0413ec9c0f4d7ff5641\"\u003e\u003ccode\u003ea124f0e\u003c/code\u003e\u003c/a\u003e [Storage] Add 12.30.3 bug fix to release branch (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49140\"\u003e#49140\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/329cc23c9c8022c25ad511a6b7b26d0baf9544dd\"\u003e\u003ccode\u003e329cc23\u003c/code\u003e\u003c/a\u003e reject headers with \\r or \\n (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/49070\"\u003e#49070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/7e753be3785598a125b29d4323ab23e6e6c25461\"\u003e\u003ccode\u003e7e753be\u003c/code\u003e\u003c/a\u003e [Storage] Prepare STG 104 GA release (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48791\"\u003e#48791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/62b78439ea790c1089a618045cec2146b6bbbb88\"\u003e\u003ccode\u003e62b7843\u003c/code\u003e\u003c/a\u003e [AutoPR azure-mgmt-enclave]-generated-from-SDK Generation - Python-6751861 (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/9733992e6b9f59e40e7fcd5ce857e9478e222686\"\u003e\u003ccode\u003e9733992\u003c/code\u003e\u003c/a\u003e [Storage] Update main CHANGELOG after patch (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48783\"\u003e#48783\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/1403053ba3a57f776d53e759728c7eb64413d872\"\u003e\u003ccode\u003e1403053\u003c/code\u003e\u003c/a\u003e Update AgentServer SDK for optional logprobs (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48778\"\u003e#48778\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/bdef02fe0231c418cfd25e04a9e97a213def8b62\"\u003e\u003ccode\u003ebdef02f\u003c/code\u003e\u003c/a\u003e added headers to redirect cleanup logic (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/48771\"\u003e#48771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Azure/azure-sdk-for-python/commit/2063e16013c308e8e4edc4ca66c2ba6487a053a7\"\u003e\u003ccode\u003e2063e16\u003c/code\u003e\u003c/a\u003e [AutoPR azure-mgmt-netapp]-generated-from-SDK Generation - Python-6747361 (\u003ca href=\"https://redirect.github.com/Azure/azure-sdk-for-python/issues/4\"\u003e#4\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Azure/azure-sdk-for-python/compare/azure-storage-file-share_12.19.0...azure-storage-file-share_12.27.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `box-sdk-gen` from 1.12.0 to 1.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/box/box-python-sdk-gen/releases\"\u003ebox-sdk-gen's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.17.0\u003c/h2\u003e\n\u003ch3\u003eNew Features and Enhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd missing webhook events (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/554\"\u003e#554\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/708\"\u003e#708\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/3d2554239b0bede7a3158cf88913592643c3e22b\"\u003e3d25542\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport event with long polling (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/757\"\u003e#757\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/673\"\u003e#673\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/481fbeb1412ecc137c0090dd4b37fe9ad75db6b0\"\u003e481fbeb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.16.0\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify events \u003ccode\u003enext_stream_position\u003c/code\u003e property type as \u003ccode\u003eint\u003c/code\u003e (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/535\"\u003e#535\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/644\"\u003e#644\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/64069db8da33988c173380defd6be065daa02496\"\u003e64069db\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features and Enhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd AI spreadsheet processor (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/533\"\u003e#533\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/630\"\u003e#630\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/66357578218913240bc923cb0dc771157ec95f54\"\u003e6635757\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Archive Public API (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/540\"\u003e#540\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/651\"\u003e#651\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/c36d1dbff42c89876c037983c792c5c7282459cc\"\u003ec36d1db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new Hubs APIs and Hubs items API (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/538\"\u003e#538\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/645\"\u003e#645\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/1daa3e8814403c78ed2a1d64187b8e4c379028fe\"\u003e1daa3e8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new property for network exception retry strategy (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/763\"\u003e#763\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/650\"\u003e#650\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/13f9593dbc4a45d094ee5709d602188ef341a1a5\"\u003e13f9593\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new schema for \u003ccode\u003eMetadata Error\u003c/code\u003e (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/539\"\u003e#539\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/646\"\u003e#646\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/49d7f349e1be4e23939ef10db1edfc6042b98175\"\u003e49d7f34\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAllow injecting private key decryption mechanism for JWT (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/754\"\u003e#754\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/636\"\u003e#636\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/4ea0af5f8f5b5516a7c23d7912c34690c017db29\"\u003e4ea0af5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove webhook validation checks (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/745\"\u003e#745\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/628\"\u003e#628\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/f0ece639d761c765b3bc59fbe3ba8582af755178\"\u003ef0ece63\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Hubs beta endpoints (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/531\"\u003e#531\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/622\"\u003e#622\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/b5e95fe5b219d067028aa395170718eca0d62189\"\u003eb5e95fe\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport new tools in AI Studio (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/534\"\u003e#534\u003c/a\u003e)  (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/633\"\u003e#633\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/ac76eb2d7c5560b30c4cec171dd90b0a0ece4ab5\"\u003eac76eb2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.15.0\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCompute webhook signature with and without escaping the body (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/737\"\u003e#737\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/607\"\u003e#607\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/e5118b8a257a042510374d91bd62a1f98c662fef\"\u003ee5118b8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix downscope token to use \u003ccode\u003eretrieveToken\u003c/code\u003e method for token retrieval (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/731\"\u003e#731\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/e4926851edccd4ee7e66157050cedd0d01cec5ea\"\u003ee492685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix slash escaping when calculating webhook signature (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/736\"\u003e#736\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/430b1754ec840582e28a277c6c8d369cbe7ebdf5\"\u003e430b175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse constant-time comparison for HMAC signatures (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/739\"\u003e#739\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/610\"\u003e#610\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/6f6660c8f3aa2b7b75b0fcd4ed015d8d761cd77f\"\u003e6f6660c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features and Enhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd AI agents warnings; allow for more types of metadata value (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/520\"\u003e#520\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/567\"\u003e#567\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/86aa1ccadac9acead7bceeafb50e45f38eb2d9cc\"\u003e86aa1cc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Shield Lists APIs (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/528\"\u003e#528\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/f980f6544a58a5c64ab0b3ec13b2771b81ea25ed\"\u003ef980f65\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support of IBM models to AI API (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/522\"\u003e#522\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/568\"\u003e#568\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/767547ae070909852800c447e65cbcc95b97c5a3\"\u003e767547a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate legal holds and AI models (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/526\"\u003e#526\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/599\"\u003e#599\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/d56228d81bd9777af5431ccc9d05233e13a0c2ed\"\u003ed56228d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.14.0\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eset default timeouts for requests (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/707\"\u003e#707\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/552\"\u003e#552\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/66b87c8986ce2f5fdb3a9eac995ef8a9643bcd76\"\u003e66b87c8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features and Enhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd security settings properties on sign template schema (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/518\"\u003e#518\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/543\"\u003e#543\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/0a45d218d1aa3fa62da7b5c8c01506fb657c0b36\"\u003e0a45d21\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport sensitive data sanitization in errors (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/695\"\u003e#695\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/533\"\u003e#533\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/abb7b1d16a192edd99ff1fc4fb7c4caf79ee5f10\"\u003eabb7b1d\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/box/box-python-sdk-gen/blob/main/CHANGELOG.md\"\u003ebox-sdk-gen's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/compare/v1.16.0...v1.17.0\"\u003e1.17.0\u003c/a\u003e (2025-09-05)\u003c/h2\u003e\n\u003ch3\u003eNew Features and Enhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd missing webhook events (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/554\"\u003e#554\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/708\"\u003e#708\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/3d2554239b0bede7a3158cf88913592643c3e22b\"\u003e3d25542\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport event with long polling (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/757\"\u003e#757\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/673\"\u003e#673\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/481fbeb1412ecc137c0090dd4b37fe9ad75db6b0\"\u003e481fbeb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/compare/v1.15.0...v1.16.0\"\u003e1.16.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify events \u003ccode\u003enext_stream_position\u003c/code\u003e property type as \u003ccode\u003eint\u003c/code\u003e (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/535\"\u003e#535\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/644\"\u003e#644\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/64069db8da33988c173380defd6be065daa02496\"\u003e64069db\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features and Enhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd AI spreadsheet processor (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/533\"\u003e#533\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/630\"\u003e#630\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/66357578218913240bc923cb0dc771157ec95f54\"\u003e6635757\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Archive Public API (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/540\"\u003e#540\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/651\"\u003e#651\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/c36d1dbff42c89876c037983c792c5c7282459cc\"\u003ec36d1db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new Hubs APIs and Hubs items API (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/538\"\u003e#538\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/645\"\u003e#645\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/1daa3e8814403c78ed2a1d64187b8e4c379028fe\"\u003e1daa3e8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new property for network exception retry strategy (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/763\"\u003e#763\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/650\"\u003e#650\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/13f9593dbc4a45d094ee5709d602188ef341a1a5\"\u003e13f9593\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new schema for \u003ccode\u003eMetadata Error\u003c/code\u003e (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/539\"\u003e#539\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/646\"\u003e#646\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/49d7f349e1be4e23939ef10db1edfc6042b98175\"\u003e49d7f34\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAllow injecting private key decryption mechanism for JWT (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/754\"\u003e#754\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/636\"\u003e#636\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/4ea0af5f8f5b5516a7c23d7912c34690c017db29\"\u003e4ea0af5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove webhook validation checks (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/745\"\u003e#745\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/628\"\u003e#628\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/f0ece639d761c765b3bc59fbe3ba8582af755178\"\u003ef0ece63\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Hubs beta endpoints (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/531\"\u003e#531\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/622\"\u003e#622\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/b5e95fe5b219d067028aa395170718eca0d62189\"\u003eb5e95fe\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport new tools in AI Studio (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/534\"\u003e#534\u003c/a\u003e)  (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/633\"\u003e#633\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/ac76eb2d7c5560b30c4cec171dd90b0a0ece4ab5\"\u003eac76eb2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/compare/v1.14.0...v1.15.0\"\u003e1.15.0\u003c/a\u003e (2025-06-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCompute webhook signature with and without escaping the body (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/737\"\u003e#737\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/607\"\u003e#607\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/e5118b8a257a042510374d91bd62a1f98c662fef\"\u003ee5118b8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix downscope token to use \u003ccode\u003eretrieveToken\u003c/code\u003e method for token retrieval (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/731\"\u003e#731\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/e4926851edccd4ee7e66157050cedd0d01cec5ea\"\u003ee492685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix slash escaping when calculating webhook signature (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/736\"\u003e#736\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/430b1754ec840582e28a277c6c8d369cbe7ebdf5\"\u003e430b175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse constant-time comparison for HMAC signatures (box/box-codegen\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/739\"\u003e#739\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/610\"\u003e#610\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/6f6660c8f3aa2b7b75b0fcd4ed015d8d761cd77f\"\u003e6f6660c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features and Enhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd AI agents warnings; allow for more types of metadata value (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/520\"\u003e#520\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/567\"\u003e#567\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/86aa1ccadac9acead7bceeafb50e45f38eb2d9cc\"\u003e86aa1cc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Shield Lists APIs (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/528\"\u003e#528\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/f980f6544a58a5c64ab0b3ec13b2771b81ea25ed\"\u003ef980f65\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support of IBM models to AI API (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/522\"\u003e#522\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/568\"\u003e#568\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/767547ae070909852800c447e65cbcc95b97c5a3\"\u003e767547a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate legal holds and AI models (box/box-openapi\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/526\"\u003e#526\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/599\"\u003e#599\u003c/a\u003e) (\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/d56228d81bd9777af5431ccc9d05233e13a0c2ed\"\u003ed56228d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/compare/v1.13.0...v1.14.0\"\u003e1.14.0\u003c/a\u003e (2025-05-02)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\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/box/box-python-sdk-gen/commit/e8cd5ae10505a9d6bd1dcd0e2ce26d9936fd0612\"\u003e\u003ccode\u003ee8cd5ae\u003c/code\u003e\u003c/a\u003e chore: release version 1.17.0 (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/709\"\u003e#709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/3d2554239b0bede7a3158cf88913592643c3e22b\"\u003e\u003ccode\u003e3d25542\u003c/code\u003e\u003c/a\u003e\u003ccode\u003ebox/box-openapi#554\u003c/code\u003e\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/708\"\u003e#708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/7297f7c5ec2980fe96e9e53d293b4a771dfbfa9a\"\u003e\u003ccode\u003e7297f7c\u003c/code\u003e\u003c/a\u003e\u003ccode\u003ebox/box-openapi#553\u003c/code\u003e\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/707\"\u003e#707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/462e43d3190c26f512d6ede8a908df01566c7fb5\"\u003e\u003ccode\u003e462e43d\u003c/code\u003e\u003c/a\u003e chore: Update \u003ccode\u003e.codegen.json\u003c/code\u003e with commit hash of \u003ccode\u003ecodegen\u003c/code\u003e and \u003ccode\u003eopenapi\u003c/code\u003e spe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/e64c6e937b7cf81e2e1c9ce327eff0d81003c502\"\u003e\u003ccode\u003ee64c6e9\u003c/code\u003e\u003c/a\u003e\u003ccode\u003ebox/box-codegen#812\u003c/code\u003e\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/695\"\u003e#695\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/ce5f5a97d26da3b89b366ed0942c2f15db43167b\"\u003e\u003ccode\u003ece5f5a9\u003c/code\u003e\u003c/a\u003e chore: Update \u003ccode\u003e.codegen.json\u003c/code\u003e with commit hash of \u003ccode\u003ecodegen\u003c/code\u003e and \u003ccode\u003eopenapi\u003c/code\u003e spe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/ffde961738ffef48f4c19433168e5fea6cc014c7\"\u003e\u003ccode\u003effde961\u003c/code\u003e\u003c/a\u003e chore: Update \u003ccode\u003e.codegen.json\u003c/code\u003e with commit hash of \u003ccode\u003ecodegen\u003c/code\u003e and \u003ccode\u003eopenapi\u003c/code\u003e spe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/290cfe9509b6f62123ce565bb50cdd980bc113fd\"\u003e\u003ccode\u003e290cfe9\u003c/code\u003e\u003c/a\u003e chore: Update \u003ccode\u003e.codegen.json\u003c/code\u003e with commit hash of \u003ccode\u003ecodegen\u003c/code\u003e and \u003ccode\u003eopenapi\u003c/code\u003e spe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/f94e9e8134353627ecc8f2cd0eea697834812dec\"\u003e\u003ccode\u003ef94e9e8\u003c/code\u003e\u003c/a\u003e chore: Update .codegen.json with commit hash of codegen and openapi spec (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/box/box-python-sdk-gen/commit/390f1aec06d01305eb95ae8b511e7b5a1fb717cd\"\u003e\u003ccode\u003e390f1ae\u003c/code\u003e\u003c/a\u003e chore: Update .codegen.json with commit hash of codegen and openapi spec (\u003ca href=\"https://redirect.github.com/box/box-python-sdk-gen/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/box/box-python-sdk-gen/compare/v1.12.0...v1.17.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `celery` from 5.4.0 to 5.6.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/celery/celery/releases\"\u003ecelery's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev5.6.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix Django worker recursion bug + defensive checks for pool_cls.\u003cstrong\u003emodule\u003c/strong\u003e by \u003ca href=\"https://github.com/maycuatroi1\"\u003e\u003ccode\u003e@​maycuatroi1\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/celery/celery/pull/10048\"\u003ecelery/celery#10048\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Update user_preload_options example to use click. by \u003ca href=\"https://github.com/jorsyk\"\u003e\u003ccode\u003e@​jorsyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/celery/celery/pull/10056\"\u003ecelery/celery#10056\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix invalid configuration key \u0026quot;bootstrap_servers\u0026quot; in Kafka demo by \u003ca href=\"https://github.com/jorsyk\"\u003e\u003ccode\u003e@​jorsyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/celery/celery/pull/10060\"\u003ecelery/celery#10060\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix broken images on PyPI page by \u003ca href=\"https://github.com/Timour-Ilyas\"\u003e\u003ccode\u003e@​Timour-Ilyas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/celery/celery/pull/10066\"\u003ecelery/celery#10066\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove broken reference. by \u003ca href=\"https://github....\n\n_Description has been truncated_","html_url":"https://github.com/pipeshub-ai/pipeshub-ai/pull/4684","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/pipeshub-ai%2Fpipeshub-ai/issues/4684","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4684/packages"}},{"old_version":"\u003c3,\u003e=2.12.0","new_version":"\u003e=2.14.1,\u003c3","update_type":"minor","path":"/backend","pr_created_at":"2026-10-25T06:18:35.000Z","version_change":"\u003c3,\u003e=2.12.0 → \u003e=2.14.1,\u003c3","issue":{"uuid":"6021528320","node_id":"PR_kwDOVWgsac8AAAABKinsSg","number":12,"state":"open","title":"build(deps): Update pydantic requirement from \u003c3,\u003e=2.12.0 to \u003e=2.14.1,\u003c3 in /backend","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-10-25T06:18:35.000Z","updated_at":"2026-10-25T06:18:39.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): Update","packages":[{"name":"pydantic","old_version":"\u003c3,\u003e=2.12.0","new_version":"\u003e=2.14.1,\u003c3","repository_url":"https://github.com/pydantic/pydantic"}],"path":"/backend","ecosystem":"pip"},"body":"Updates the requirements on [pydantic](https://github.com/pydantic/pydantic) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.0...v2.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 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/TashfikS/prompt-vault-mcp/pull/12","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/TashfikS%2Fprompt-vault-mcp/issues/12","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/12/packages"}},{"old_version":"2.13.4","new_version":"2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-25T06:04:00.000Z","version_change":"2.13.4 → 2.14.1","issue":{"uuid":"6021441340","node_id":"PR_kwDORn3EFc8AAAABKijcUg","number":10,"state":"open","title":"deps(backend): bump the minor-and-patch group across 1 directory with 7 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-25T06:04:00.000Z","updated_at":"2026-10-25T06:04:03.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(backend): bump","group_name":"minor-and-patch","update_count":7,"packages":[{"name":"fastapi","old_version":"0.136.1","new_version":"0.159.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.54.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pydantic","old_version":"2.13.4","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.14.1","new_version":"2.16.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"python-multipart","old_version":"0.0.29","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"croniter","old_version":"6.2.2","new_version":"6.2.4","repository_url":"https://github.com/pallets-eco/croniter"}],"path":null,"ecosystem":"pip"},"body":"Bumps the minor-and-patch group with 7 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.159.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.54.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.4` | `2.14.1` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.1` | `2.16.1` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.29` | `0.0.32` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [croniter](https://github.com/pallets-eco/croniter) | `6.2.2` | `6.2.4` |\n\n\nUpdates `fastapi` from 0.136.1 to 0.159.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.159.1\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional unions of form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16586\"\u003e#16586\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.159.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16584\"\u003e#16584\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.158.2\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for optional form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16582\"\u003e#16582\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.158.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Preserve form media types in OpenAPI. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16579\"\u003e#16579\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.158.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining form models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16577\"\u003e#16577\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.157.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for combining query, header, and cookie parameter models. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16573\"\u003e#16573\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📝 Clarify boolean query parameter parsing. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16569\"\u003e#16569\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Clarify nullable query parameters and path parameter defaults. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16568\"\u003e#16568\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👷 Remove translation notifications and approval labeling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16570\"\u003e#16570\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.156.8\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Preserve uploaded file positions when converting to \u003ccode\u003ebytes\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16566\"\u003e#16566\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.156.7\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix validation error locations for form and file \u003ccode\u003eAliasChoices\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16564\"\u003e#16564\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.156.6\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/fastapi/fastapi/commit/4bdfbe4513084b19e22421ce1f916d8c1ac462a0\"\u003e\u003ccode\u003e4bdfbe4\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.159.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16588\"\u003e#16588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b169d23e7d65c99ce83e1cf5c6e76f3f585c6017\"\u003e\u003ccode\u003eb169d23\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/86274cc0acc9fc6d608e251c874105c94634bddf\"\u003e\u003ccode\u003e86274cc\u003c/code\u003e\u003c/a\u003e ✨ Add support for optional unions of form models (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16586\"\u003e#16586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/68cc4cbb2e0600841b0d6bdd1cc29038b54a00e6\"\u003e\u003ccode\u003e68cc4cb\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.159.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16585\"\u003e#16585\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/fea4dedffddcf5641514334b78f69a9d93b1eb04\"\u003e\u003ccode\u003efea4ded\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/2f6d43c6ecc9a392ea0fcb14c0b063e76b448b62\"\u003e\u003ccode\u003e2f6d43c\u003c/code\u003e\u003c/a\u003e ✨ Add support for optional query, header, and cookie parameter models (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16584\"\u003e#16584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e4c5d0293470f107bc0b4886f484a48c1315d091\"\u003e\u003ccode\u003ee4c5d02\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.158.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16583\"\u003e#16583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7507c64b2906a3ca78802fe4a0241ec8b1f3818e\"\u003e\u003ccode\u003e7507c64\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/410270fa3bac8b9f8b46bf1f5a1a3f06f3ede327\"\u003e\u003ccode\u003e410270f\u003c/code\u003e\u003c/a\u003e ✨ Add support for optional form models (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16582\"\u003e#16582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ed39e8b192a24da5b6b609436403da11ad4a93e8\"\u003e\u003ccode\u003eed39e8b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.158.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16580\"\u003e#16580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.159.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.54.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.54.0\u003c/h2\u003e\n\u003ch2\u003e📨 Send metadata after the response body\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.54.0 adds response trailers and \u003ccode\u003e103 Early Hints\u003c/code\u003e to its experimental HTTP/2 implementation through \u003ccode\u003ezttp\u003c/code\u003e.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.54.0 \u0026quot;zttp\u0026gt;=0.0.34\u0026quot;\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend HTTP/2 response trailers\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e). The ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension lets applications send metadata, such as checksums, after the response body. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them. Multiple trailer messages are combined before completing the response.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental and opt-in.\u003c/strong\u003e Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Upgrade-based h2c and WebSockets over HTTP/2 remain unsupported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e💡 Hint at resources before the final response\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend \u003ccode\u003e103 Early Hints\u003c/code\u003e over HTTP/2\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e). Applications can use the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension to send resource hints before the final response. Each supplied link becomes a separate \u003ccode\u003eLink\u003c/code\u003e header.\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.53.0...0.54.0\"\u003e0.53.0...0.54.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.53.0\u003c/h2\u003e\n\u003ch2\u003e🌐 Opt-in HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.53.0 adds experimental HTTP/2 through \u003ccode\u003ezttp\u003c/code\u003e, alongside a new \u003ccode\u003ezuvloop\u003c/code\u003e integration and connection-handling improvements.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.53.0\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eServe HTTP/1.1 and HTTP/2 with \u003ccode\u003ezttp\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e). Install \u003ccode\u003ezttp\u003c/code\u003e, then enable HTTP/2 with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Uvicorn negotiates HTTP/2 over TLS with ALPN and supports cleartext prior knowledge.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental.\u003c/strong\u003e Upgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚙️ More event loop choice\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eRun Uvicorn with \u003ccode\u003ezuvloop\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e). Install \u003ccode\u003ezuvloop\u003c/code\u003e separately and select it explicitly with \u003ccode\u003e--loop zuvloop\u003c/code\u003e on CPython 3.14 or newer.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🛡️ More reliable connections and proxies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHonor \u003ccode\u003eConnection: close\u003c/code\u003e token lists\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e). Uvicorn now parses comma-separated tokens case-insensitively across HTTP implementations.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTrust IPv6 loopback proxies by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e). The default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value now includes \u003ccode\u003e::1\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKeep upgraded WebSockets alive\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e). Uvicorn cancels the HTTP keep-alive timer when the connection becomes a WebSocket.\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.52.4...0.53.0\"\u003e0.52.4...0.53.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\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.52.3...0.52.4\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/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.54.0 (September 24, 2026)\u003c/h2\u003e\n\u003cp\u003eHTTP/2 support remains experimental. Install \u003ccode\u003ezttp\u0026gt;=0.0.34\u003c/code\u003e and enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd HTTP/2 response trailers through the ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd HTTP/2 \u003ccode\u003e103 Early Hints\u003c/code\u003e through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.53.0 (September 14, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release adds experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e. Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\nUpgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003ezuvloop\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle comma-separated, case-insensitive \u003ccode\u003eConnection: close\u003c/code\u003e tokens across HTTP implementations (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTrust IPv6 loopback in the default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancel the HTTP keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.4 (August 18, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.3 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.2 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.1 (August 1, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComplete the closing handshake on server-initiated WebSocket closes in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e and \u003ccode\u003ewsproto\u003c/code\u003e implementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3053\"\u003e#3053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing write flow control to the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, preventing data truncation on server-initiated closes with large in-flight payloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3048\"\u003e#3048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle connection loss while a WebSocket write is waiting on backpressure (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3050\"\u003e#3050\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3eb9a9ab9af69005c687728097461c1fd2a95db9\"\u003e\u003ccode\u003e3eb9a9a\u003c/code\u003e\u003c/a\u003e Version 0.54.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3161\"\u003e#3161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/cd7ef6d31c1a09a3653f326cda7813d35ffd6082\"\u003e\u003ccode\u003ecd7ef6d\u003c/code\u003e\u003c/a\u003e Remove races from supervisor tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3134\"\u003e#3134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a56c7cce64aaa37e5864f882a5cbce8aa1dac47a\"\u003e\u003ccode\u003ea56c7cc\u003c/code\u003e\u003c/a\u003e Support HTTP/2 response trailers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3146\"\u003e#3146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9bd4404cca9506e9ba4f46b69ef72d011ceef2bd\"\u003e\u003ccode\u003e9bd4404\u003c/code\u003e\u003c/a\u003e chore(deps): bump anyio from 4.13.0 to 4.14.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3145\"\u003e#3145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/21f39ef7988366f77fb3172569bd235ac5de34cc\"\u003e\u003ccode\u003e21f39ef\u003c/code\u003e\u003c/a\u003e Add HTTP/2 Early Hints support (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/421708fbc1a704dac8bd4053a7c4c0bf4d3704ee\"\u003e\u003ccode\u003e421708f\u003c/code\u003e\u003c/a\u003e Version 0.53.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3136\"\u003e#3136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/f1a1bff7be819f5724d6fdf86dfd448a97c62e23\"\u003e\u003ccode\u003ef1a1bff\u003c/code\u003e\u003c/a\u003e Unset the keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/63971ed952090438896e6eba7d07178b616d97cc\"\u003e\u003ccode\u003e63971ed\u003c/code\u003e\u003c/a\u003e Document HTTP/2 support (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3130\"\u003e#3130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7d1a0055aee5e281accc646b559ddd147486bf8a\"\u003e\u003ccode\u003e7d1a005\u003c/code\u003e\u003c/a\u003e Remove race from multiprocess health check test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3128\"\u003e#3128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/5ac6265a01ff6dcadb0e4250152c3deaf8a168a9\"\u003e\u003ccode\u003e5ac6265\u003c/code\u003e\u003c/a\u003e Add ::1 to FORWARDED_ALLOW_IPS (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.54.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.4 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...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-settings` from 2.14.1 to 2.16.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.16.1\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThis patch release fixes two CLI regressions introduced in 2.16.0.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed-length tuple positionals such as \u003ccode\u003eCliPositionalArg[tuple[int, int]]\u003c/code\u003e and \u003ccode\u003eNamedTuple\u003c/code\u003es are single-valued again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1069\"\u003e#1069\u003c/a\u003e). Since 2.16.0 they were treated as variadic, so a CLI either refused to start with a \u003ccode\u003eSettingsError\u003c/code\u003e or put the wrong argument into the tuple. Variable-length tuples (\u003ccode\u003etuple[int, ...]\u003c/code\u003e and bare \u003ccode\u003eTuple\u003c/code\u003e) are still variadic.\u003c/li\u003e\n\u003cli\u003eA field typed as an alias of a list of dicts, e.g. \u003ccode\u003etype ListOfDict = list[dict[str, int]]\u003c/code\u003e, accepts a JSON list again (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1049\"\u003e#1049\u003c/a\u003e). Since 2.16.0, \u003ccode\u003e--xx '[{\u0026quot;a\u0026quot;:1},{\u0026quot;b\u0026quot;:2}]'\u003c/code\u003e was merged into the single dict \u003ccode\u003e{\u0026quot;a\u0026quot;: 1, \u0026quot;b\u0026quot;: 2}\u003c/code\u003e and failed validation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden CI by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1044\"\u003epydantic/pydantic-settings#1044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep list of dicts CLI values as lists 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/1049\"\u003epydantic/pydantic-settings#1049\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep fixed-length tuple CLI positionals single-valued 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/1069\"\u003epydantic/pydantic-settings#1069\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.16.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/1087\"\u003epydantic/pydantic-settings#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1056\"\u003epydantic/pydantic-settings#1056\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.16.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBreaking changes and behavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.10 is no longer supported\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1003\"\u003e#1003\u003c/a\u003e). pydantic-settings now requires Python 3.11+, since 3.10 reaches end of life this month. The \u003ccode\u003etomli\u003c/code\u003e fallback is gone in favor of stdlib \u003ccode\u003etomllib\u003c/code\u003e; the \u003ccode\u003etoml\u003c/code\u003e extra is kept as an empty extra so \u003ccode\u003epip install pydantic-settings[toml]\u003c/code\u003e keeps working.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003epython-dotenv\u0026gt;=1.2.2\u003c/code\u003e is now required\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/971\"\u003e#971\u003c/a\u003e) to pick up the fix for CVE-2026-28684.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAliases are ignored in every source when \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1033\"\u003e#1033\u003c/a\u003e). Env vars, secrets, CLI flags and defaults now use only field names, matching pydantic. An env var named after the alias is now ignored instead of raising \u003ccode\u003eextra_forbidden\u003c/code\u003e, and the CLI exposes \u003ccode\u003e--apple\u003c/code\u003e rather than \u003ccode\u003e--pomo\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003evalidation_alias\u003c/code\u003e takes precedence over \u003ccode\u003ealias\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1038\"\u003e#1038\u003c/a\u003e). When the two differ, values from JSON/YAML/TOML files and the CLI were silently ignored; they now load. CLI help lists the \u003ccode\u003evalidation_alias\u003c/code\u003e flag first, and \u003ccode\u003eCliApp.serialize\u003c/code\u003e emits it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCLI case-insensitivity only lowercases registered options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1036\"\u003e#1036\u003c/a\u003e). With \u003ccode\u003ecase_sensitive=False\u003c/code\u003e, args after \u003ccode\u003e--\u003c/code\u003e and those captured by \u003ccode\u003eCliUnknownArgs\u003c/code\u003e keep their case (\u003ccode\u003e-Xmx4G\u003c/code\u003e no longer becomes \u003ccode\u003e-xmx4g\u003c/code\u003e). Unrecognized options are now reported as typed (\u003ccode\u003e--NOPE\u003c/code\u003e instead of \u003ccode\u003e--nope\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eJSON and YAML config files are read as UTF-8 by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/955\"\u003e#955\u003c/a\u003e) instead of the locale encoding, completing the secrets-file fix from 2.15.0. \u003ccode\u003ejson_file_encoding\u003c/code\u003e/\u003ccode\u003eyaml_file_encoding\u003c/code\u003e still override it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDiscriminated union defaults are partially updated again\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/997\"\u003e#997\u003c/a\u003e). This reverts the 2.15.0 regression with \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e: the default is only dropped when the incoming value selects a \u003cem\u003edifferent\u003c/em\u003e union member.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.15 and pydantic 2.14 support\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1026\"\u003e#1026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1029\"\u003e#1029\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1022\"\u003e#1022\u003c/a\u003e). pydantic 2.14 broke \u003ccode\u003eCliApp.run\u003c/code\u003e and \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e handling; both are fixed.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCached settings instances\u003c/strong\u003e via \u003ccode\u003eSettings.settings_cached()\u003c/code\u003e and \u003ccode\u003eSettings.settings_clear_cache()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/952\"\u003e#952\u003c/a\u003e). These give you a process-local singleton per settings class without hand-rolling \u003ccode\u003elru_cache\u003c/code\u003e wrappers. Calling the class directly still builds a fresh instance.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAWS Systems Manager Parameter Store source\u003c/strong\u003e — \u003ccode\u003eAWSSystemsManagerSettingsSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/941\"\u003e#941\u003c/a\u003e). It recursively reads every parameter under an \u003ccode\u003essm_path\u003c/code\u003e, with \u003ccode\u003e/\u003c/code\u003e mapping onto nested models. Install it with the new \u003ccode\u003eaws-systems-manager\u003c/code\u003e extra.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenv_file_depth\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/940\"\u003e#940\u003c/a\u003e) lets a relative \u003ccode\u003eenv_file\u003c/code\u003e be found in parent directories, mirroring \u003ccode\u003epyproject_toml_depth\u003c/code\u003e. This is useful when scripts run from a subdirectory of a monorepo. It defaults to \u003ccode\u003e0\u003c/code\u003e, which keeps the current behavior.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eCliVariadicArg\u003c/code\u003e for named variadic options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/949\"\u003e#949\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/958\"\u003e#958\u003c/a\u003e). It accepts \u003ccode\u003e--param a b c\u003c/code\u003e in addition to repeated \u003ccode\u003e--param a --param b\u003c/code\u003e. Required fields need at least one value.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4e286e284fe43f0fb86872b91f708d3dd5356bfc\"\u003e\u003ccode\u003e4e286e2\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1087\"\u003e#1087\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/993b59e1682799d5ad33b721b7158718b6278944\"\u003e\u003ccode\u003e993b59e\u003c/code\u003e\u003c/a\u003e Keep fixed-length tuple CLI positionals single-valued (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1069\"\u003e#1069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f651a7a57a0e3b26147da02f2fda2d05f8c34cce\"\u003e\u003ccode\u003ef651a7a\u003c/code\u003e\u003c/a\u003e Keep list of dicts CLI values as lists (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1049\"\u003e#1049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ecf7d90bf1b1b71f2875f607c1668c44f576bf9c\"\u003e\u003ccode\u003eecf7d90\u003c/code\u003e\u003c/a\u003e Harden CI (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1044\"\u003e#1044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8c259f41b49b4cefbe4fb676d3c1f52dddd3cca8\"\u003e\u003ccode\u003e8c259f4\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1043\"\u003e#1043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4bc667ada383aca4df00304cd171f327a9fae163\"\u003e\u003ccode\u003e4bc667a\u003c/code\u003e\u003c/a\u003e Keep case of non-option CLI args when case_sensitive=False (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f75a8057a5fafe4aef3a042c2adf367c6987f73f\"\u003e\u003ccode\u003ef75a805\u003c/code\u003e\u003c/a\u003e Simplify alias resolution branch and test alias with AliasChoices/AliasPath (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/cfdc5585e821e84905905027de68a0188213537a\"\u003e\u003ccode\u003ecfdc558\u003c/code\u003e\u003c/a\u003e Honor env_parse_none_str for GCP Secret Manager (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1040\"\u003e#1040\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/081d39f9c73f46e68bc2bef75a23f7d84ed0c377\"\u003e\u003ccode\u003e081d39f\u003c/code\u003e\u003c/a\u003e Fix config file and CLI values being ignored when alias differs from validati...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c46ebc4cc599c09f3692f4d2e82a8f0bb5433f3a\"\u003e\u003ccode\u003ec46ebc4\u003c/code\u003e\u003c/a\u003e Expand home paths when checking TOML table headers (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.1...v2.16.1\"\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.29 to 0.0.32\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.32\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace per-byte partial-boundary scan with rfind lookbehind by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003eKludex/python-multipart#300\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.31\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/295\"\u003eKludex/python-multipart#295\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/296\"\u003eKludex/python-multipart#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate Content-Length is non-negative in parse_form by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/297\"\u003eKludex/python-multipart#297\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.30\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTreat only \u003ccode\u003e\u0026amp;\u003c/code\u003e as the urlencoded field separator by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/290\"\u003eKludex/python-multipart#290\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231 extended parameters in \u003ccode\u003eparse_options_header\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003eKludex/python-multipart#291\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.29...0.0.30\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.29...0.0.30\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.32 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary scanning for CR/LF-dense part data \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003e#300\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.31 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/295\"\u003e#295\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/296\"\u003e#296\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eValidate \u003ccode\u003eContent-Length\u003c/code\u003e is non-negative in \u003ccode\u003eparse_form\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/297\"\u003e#297\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.30 (2026-05-31)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eParse \u003ccode\u003eapplication/x-www-form-urlencoded\u003c/code\u003e bodies per the WHATWG URL standard, treating only \u003ccode\u003e\u0026amp;\u003c/code\u003e as a field separator \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/290\"\u003e#290\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231/5987 extended parameters (\u003ccode\u003ename*\u003c/code\u003e, \u003ccode\u003efilename*\u003c/code\u003e) in \u003ccode\u003eparse_options_header\u003c/code\u003e, keeping the plain parameter authoritative per \u003ca href=\"https://datatracker.ietf.org/doc/html/rfc7578#section-4.2\"\u003eRFC 7578 §4.2\u003c/a\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003e#291\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/238ead62a0bb6f6cdfe122708faa13812f59f9a6\"\u003e\u003ccode\u003e238ead6\u003c/code\u003e\u003c/a\u003e Version 0.0.32 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/302\"\u003e#302\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/86729796093b04f7cf414ea6c2c4499e2a5750af\"\u003e\u003ccode\u003e8672979\u003c/code\u003e\u003c/a\u003e Replace per-byte partial-boundary scan with rfind lookbehind (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/300\"\u003e#300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/8190779d8234c8bf8cbed7891c11d4bfb79e84df\"\u003e\u003ccode\u003e8190779\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 7 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/301\"\u003e#301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/0d3c086d237f6fd20fefe8853e95979276a07c44\"\u003e\u003ccode\u003e0d3c086\u003c/code\u003e\u003c/a\u003e Use uv package ecosystem for Dependabot (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/4cffc68a165f7a6f6b7756ce006fabf07a05b7a4\"\u003e\u003ccode\u003e4cffc68\u003c/code\u003e\u003c/a\u003e Version 0.0.31 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/c814948acf509cef7881fa75c969969b19239bbf\"\u003e\u003ccode\u003ec814948\u003c/code\u003e\u003c/a\u003e Reject negative \u003ccode\u003eContent-Length\u003c/code\u003e in \u003ccode\u003eparse_form\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/297\"\u003e#297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6b837d47bc68826ed5cbbcb50c6c6a6093444494\"\u003e\u003ccode\u003e6b837d4\u003c/code\u003e\u003c/a\u003e Bound header field name size before validating (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/e0c4f9df2e737d1663fbbdd6563f80613a2089f9\"\u003e\u003ccode\u003ee0c4f9d\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/294\"\u003e#294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b8a01bb683e8e8675fdb5d831b206a478c8215aa\"\u003e\u003ccode\u003eb8a01bb\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6732164f30c58e28589a1e22213d2f6b8c6bad9f\"\u003e\u003ccode\u003e6732164\u003c/code\u003e\u003c/a\u003e Speed up multipart header parsing and callback dispatch (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/295\"\u003e#295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.29...0.0.32\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 9.0.3 to 9.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.1.1\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.1 (2026-06-19)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e: Fixed a logic bug in \u003ccode\u003epytest.RaisesGroup\u003c/code\u003e which would might cause it to display incorrect \u0026quot;It matches \u003c!-- raw HTML omitted --\u003eFooError()\u003c!-- raw HTML omitted --\u003e which was paired with \u003c!-- raw HTML omitted --\u003eBarError\u003c!-- raw HTML omitted --\u003e\u0026quot; messages.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14591\"\u003e#14591\u003c/a\u003e: Fixed a regression in pytest 9.1.0 which caused overriding a parametrized fixture with an indirect \u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/pytest\"\u003e\u003ccode\u003e@​pytest\u003c/code\u003e\u003c/a\u003e.mark.parametrize\u003c!-- raw HTML omitted --\u003e to fail with \u0026quot;duplicate parametrization of '\u0026lt;fixture name\u0026gt;'\u0026quot;.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14606\"\u003e#14606\u003c/a\u003e: Fixed \u003ccode\u003elist-item\u003c/code\u003e typing errors from mypy in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e \u003ccode\u003eargvalues\u003c/code\u003e parameter.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14608\"\u003e#14608\u003c/a\u003e: Fixed a regression in pytest 9.1.0 where \u003ccode\u003econftest.py\u003c/code\u003e files located in \u003ccode\u003e\u0026lt;invocation dir\u0026gt;/test*\u003c/code\u003e were no longer loaded as initial conftests when invoked without arguments.\nThis could cause certain hooks (like \u003ccode\u003epytest_addoption\u003c/code\u003e) in these files to not fire.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e9.1.0\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.0 (2026-06-13)\u003c/h1\u003e\n\u003ch2\u003eRemovals and backward incompatible breaking changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14533\"\u003e#14533\u003c/a\u003e: When using \u003ccode\u003e--doctest-modules\u003c/code\u003e, autouse fixtures with \u003ccode\u003emodule\u003c/code\u003e, \u003ccode\u003epackage\u003c/code\u003e or \u003ccode\u003esession\u003c/code\u003e scope that are defined inline in Python test modules (not plugins or conftests) will now possibly execute twice.\u003c/p\u003e\n\u003cp\u003eIf this is undesirable, move the fixture definition to a \u003ccode\u003econftest.py\u003c/code\u003e file if possible.\u003c/p\u003e\n\u003cp\u003eTechnical explanation for those interested:\nWhen using \u003c!-- raw HTML omitted --\u003e--doctest-modules\u003c!-- raw HTML omitted --\u003e, pytest possibly collects Python modules twice, once as \u003ccode\u003epytest.Module\u003c/code\u003e and once as a \u003ccode\u003eDoctestModule\u003c/code\u003e (depending on the configuration).\nDue to improvements in pytest's fixture implementation, if e.g. the \u003ccode\u003eDoctestModule\u003c/code\u003e collects a fixture, it is now visible to it only, and not to the \u003ccode\u003eModule\u003c/code\u003e.\nThis means that both need to register the fixtures independently.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations (removal in next major release)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/10819\"\u003e#10819\u003c/a\u003e: Added a deprecation warning for class-scoped fixtures defined as instance methods (without \u003ccode\u003e@classmethod\u003c/code\u003e). Such fixtures set attributes on a different instance than the test methods use, leading to unexpected behavior. Use \u003ccode\u003e@classmethod\u003c/code\u003e decorator instead -- by \u003ccode\u003eyastcher\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003e10819\u003c/code\u003e and \u003ccode\u003e14011\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12882\"\u003e#12882\u003c/a\u003e: Calling \u003ccode\u003erequest.getfixturevalue() \u0026lt;pytest.FixtureRequest.getfixturevalue\u0026gt;\u003c/code\u003e during teardown to request a fixture that was not already requested is now deprecated and will become an error in pytest 10.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003edynamic-fixture-request-during-teardown\u003c/code\u003e for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13409\"\u003e#13409\u003c/a\u003e: Using non-\u003ccode\u003e~collections.abc.Collection\u003c/code\u003e iterables (such as generators, iterators, or custom iterable objects) for the \u003ccode\u003eargvalues\u003c/code\u003e parameter in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e and \u003ccode\u003emetafunc.parametrize \u0026lt;pytest.Metafunc.parametrize\u0026gt;\u003c/code\u003e is now deprecated.\u003c/p\u003e\n\u003cp\u003eThese iterables get exhausted after the first iteration,\nleading to tests getting unexpectedly skipped in cases such as running \u003ccode\u003epytest.main()\u003c/code\u003e multiple times,\nusing class-level parametrize decorators,\nor collecting tests multiple times.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003eparametrize-iterators\u003c/code\u003e for details and suggestions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13946\"\u003e#13946\u003c/a\u003e: The private \u003ccode\u003econfig.inicfg\u003c/code\u003e attribute is now deprecated.\nUse \u003ccode\u003econfig.getini() \u0026lt;pytest.Config.getini\u0026gt;\u003c/code\u003e to access configuration values instead.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003econfig-inicfg\u003c/code\u003e for more details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14004\"\u003e#14004\u003c/a\u003e: Passing \u003ccode\u003ebaseid\u003c/code\u003e to \u003ccode\u003e~pytest.FixtureDef\u003c/code\u003e or \u003ccode\u003enodeid\u003c/code\u003e strings to fixture registration APIs is now deprecated. These are internal pytest APIs that are used by some plugins.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/cf470ec0bf7eb89cd97dd56df4859eae5db46447\"\u003e\u003ccode\u003ecf470ec\u003c/code\u003e\u003c/a\u003e Prepare release version 9.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/e0c8ce6cc5db1f08363be6f152c32e6838df2690\"\u003e\u003ccode\u003ee0c8ce6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14625\"\u003e#14625\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/a07c31a97...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/1b82d1694fce22385ee7a4287917fbafbaf2e757\"\u003e\u003ccode\u003e1b82d16\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14624\"\u003e#14624\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/b375b79ec...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/501c4bc784da3b08bfcaa64858eba5d15dc59e53\"\u003e\u003ccode\u003e501c4bc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14596\"\u003e#14596\u003c/a\u003e from bluetech/doc-classmethod\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b61f588e36e9377c3d1d3f06bece1da0fc31d9ca\"\u003e\u003ccode\u003eb61f588\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14622\"\u003e#14622\u003c/a\u003e from chrisburr/fix-14608-initial-conftest-test-subdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/9a567e009f4d2da3ce1721c6db3109cb5744d40a\"\u003e\u003ccode\u003e9a567e0\u003c/code\u003e\u003c/a\u003e [automated] Update plugin list (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14617\"\u003e#14617\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14618\"\u003e#14618\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ef8b2993e5b48639e4a3d97d0525df9760781384\"\u003e\u003ccode\u003eef8b299\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14620\"\u003e#14620\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/680f9f3ed...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/66abd0784d4cb7c1ba44ab9a8896506cd4985acc\"\u003e\u003ccode\u003e66abd07\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e from bysiber/fix-stale-iexp-raisesgroup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/79fbf93b666cac5f27c9dad047943d47b766c8d5\"\u003e\u003ccode\u003e79fbf93\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14612\"\u003e#14612\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/974ed48b6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/0d312eb876177e9f1c04262b54060a41034ebf5c\"\u003e\u003ccode\u003e0d312eb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14611\"\u003e#14611\u003c/a\u003e from bluetech/parametrize-argvalues-typing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.0.3...9.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `croniter` from 6.2.2 to 6.2.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/croniter/releases\"\u003ecroniter's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.2.4\u003c/h2\u003e\n\u003ch2\u003ecroniter 6.2.4\u003c/h2\u003e\n\u003ch3\u003eBugfixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eexpand_from_start_time\u003c/code\u003e day-of-week low bound so Sunday wraps correctly for stepped day-of-week ranges (\u003ccode\u003eisoweekday() % 7\u003c/code\u003e instead of \u003ccode\u003eweekday() + 1\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/239\"\u003e#239\u003c/a\u003e, thanks \u003ca href=\"https://github.com/alhudz\"\u003e\u003ccode\u003e@​alhudz\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePackaging\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump pinned GitHub Actions via dependabot. (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/238\"\u003e#238\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/240\"\u003e#240\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eInstall:\u003c/strong\u003e \u003ccode\u003epip install croniter==6.2.4\u003c/code\u003e · \u003ca href=\"https://pypi.org/project/croniter/6.2.4/\"\u003ePyPI\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.2.3\u003c/h2\u003e\n\u003cp\u003eNo release notes provided.\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/croniter/blob/main/CHANGELOG.rst\"\u003ecroniter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.2.4 (2026-07-10)\u003c/h2\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Fix ``expand_from_start_time`` day-of-week low bound so Sunday wraps correctly for stepped day-of-week ranges (``isoweekday() % 7`` instead of ``weekday() + 1``). [44e3090, [#239](https://github.com/pallets-eco/croniter/issues/239), @alhudz]\n\u003cp\u003ePackaging\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBump pinned GitHub Actions via dependabot. [fd13d2e, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/240\"\u003e#240\u003c/a\u003e; 5cd2e46, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/238\"\u003e#238\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.3 (2026-07-02)\u003c/h2\u003e\n\u003cp\u003eFeatures and Improvements\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Fix quadratic expansion of comma-separated range lists for a large speed-up on expressions with many ranges. [1d79fc6, [#231](https://github.com/pallets-eco/croniter/issues/231), @alhudz]\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Reject a zero step (e.g. ``5-5/0``) in equal and reversed cron ranges instead of silently accepting it. [ab27767, [#232](https://github.com/pallets-eco/croniter/issues/232), @alhudz]\n- Fix ``expand_from_start_time`` month low-bound off-by-one so stepped month ranges start on the correct month. [f329964, [#235](https://github.com/pallets-eco/croniter/issues/235), @alhudz]\n\nPackaging\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eFix zizmor-reported security findings in GitHub Actions workflows. [ed19f94, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/230\"\u003e#230\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eBump pinned build and CI dependencies via dependabot.\u003c/li\u003e\n\u003cli\u003eUpgrade locked development and build dependencies (\u003ccode\u003euv lock --upgrade\u003c/code\u003e).\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/58534997eb4634344f00d407fb199d4d1bd057e7\"\u003e\u003ccode\u003e5853499\u003c/code\u003e\u003c/a\u003e Prepare for release 6.2.4 (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/241\"\u003e#241\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/fd13d2ec447efd854806638cb5f71a2a3a90a0b5\"\u003e\u003ccode\u003efd13d2e\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/240\"\u003e#240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/44e3090ae47ccf72e4027ed6fabf6a31eca42f85\"\u003e\u003ccode\u003e44e3090\u003c/code\u003e\u003c/a\u003e wrap sunday in expand_from_start_time day-of-week low bound (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/239\"\u003e#239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/5cd2e4611e8ebea446a9d0edef3f9d8e1f30c0e3\"\u003e\u003ccode\u003e5cd2e46\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/238\"\u003e#238\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/f1eeddd7b9057b66406d162d04879258b29601d5\"\u003e\u003ccode\u003ef1eeddd\u003c/code\u003e\u003c/a\u003e Prepare for 6.2.4 development (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/237\"\u003e#237\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/22b59e05f5ca485c45596b2a9b580fddffbf753f\"\u003e\u003ccode\u003e22b59e0\u003c/code\u003e\u003c/a\u003e Prepare for release 6.2.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/236\"\u003e#236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/ab277671adc8e446e8dc7f1e939eabf024b6199e\"\u003e\u003ccode\u003eab27767\u003c/code\u003e\u003c/a\u003e reject zero step in equal and reversed cron ranges (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/232\"\u003e#232\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/f329964223eeb29e7788b1a9d615b525148fec96\"\u003e\u003ccode\u003ef329964\u003c/code\u003e\u003c/a\u003e fix expand_from_start_time month low bound off-by-one (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/235\"\u003e#235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/9810279c20030954e2f1ed2cf5f1d34b98c6b07f\"\u003e\u003ccode\u003e9810279\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/233\"\u003e#233\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/d051aaf6342fbe9c559b9fcd99e6fb6f3bb63cb7\"\u003e\u003ccode\u003ed051aaf\u003c/code\u003e\u003c/a\u003e Bump hatchling from 1.29.0 to 1.30.1 in the pip-dependencies group (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/234\"\u003e#234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/croniter/compare/6.2.2...6.2.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 \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/sphildreth/spf5000/pull/10","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphildreth%2Fspf5000/issues/10","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/10/packages"}},{"old_version":"2.13.5","new_version":"2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-23T14:16:10.000Z","version_change":"2.13.5 → 2.14.1","issue":{"uuid":"5999437116","node_id":"PR_kwDOVPvI2M8AAAABKRQRMA","number":7,"state":"closed","title":"Bump the python group with 4 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-10-23T14:27:20.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-23T14:16:10.000Z","updated_at":"2026-10-23T14:27:31.000Z","time_to_close":670,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":4,"packages":[{"name":"pydantic","old_version":"2.13.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"tenacity","old_version":"9.1.4","new_version":"9.2.1","repository_url":"https://github.com/jd/tenacity"},{"name":"regex","old_version":"2026.9.10","new_version":"2026.9.29","repository_url":"https://github.com/mrabarnett/mrab-regex"},{"name":"ruff","old_version":"0.16.8","new_version":"0.17.1","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 4 updates: [pydantic](https://github.com/pydantic/pydantic), [tenacity](https://github.com/jd/tenacity), [regex](https://github.com/mrabarnett/mrab-regex) and [ruff](https://github.com/astral-sh/ruff).\n\nUpdates `pydantic` from 2.13.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tenacity` from 9.1.4 to 9.2.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jd/tenacity/releases\"\u003etenacity's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.2.1\u003c/h2\u003e\n\u003cp\u003e9.2.0 was tagged but never reached PyPI: the upload rejected its package description (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/714\"\u003e#714\u003c/a\u003e). 9.2.1 is the first release on PyPI with everything in \u003ca href=\"https://github.com/jd/tenacity/releases/tag/9.2.0\"\u003e9.2.0\u003c/a\u003e, plus the changes below.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore(mypy): drop vestigial tornado ignore_missing_imports override by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/676\"\u003ejd/tenacity#676\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: annotate wait_base.\u003cstrong\u003eradd\u003c/strong\u003e as taking the int seed from sum() by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/677\"\u003ejd/tenacity#677\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(mypy): enable the strictness options \u003ccode\u003estrict\u003c/code\u003e leaves off by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/678\"\u003ejd/tenacity#678\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: drop always-true truthiness checks and enable truthy-bool by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/679\"\u003ejd/tenacity#679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: declare BaseAction's REPR_FIELDS and NAME as ClassVar by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/680\"\u003ejd/tenacity#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: fix possibly-undefined and deprecated call sites by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/681\"\u003ejd/tenacity#681\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: mark overridden methods with \u003ca href=\"https://github.com/override\"\u003e\u003ccode\u003e@​override\u003c/code\u003e\u003c/a\u003e by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/682\"\u003ejd/tenacity#682\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: restore support for falsy wait values and callable + strategy by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/694\"\u003ejd/tenacity#694\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: read the tornado global live instead of an import-time snapshot by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/696\"\u003ejd/tenacity#696\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect enabled=False on the direct-call path by \u003ca href=\"https://github.com/mahirhir\"\u003e\u003ccode\u003e@​mahirhir\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/645\"\u003ejd/tenacity#645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: only treat None and 0 as \u0026quot;no wait\u0026quot; by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/741\"\u003ejd/tenacity#741\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: restore PyPI-compatible package description by \u003ca href=\"https://github.com/arindamsikder\"\u003e\u003ccode\u003e@​arindamsikder\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/725\"\u003ejd/tenacity#725\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: check built distributions with twine by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/742\"\u003ejd/tenacity#742\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/mahirhir\"\u003e\u003ccode\u003e@​mahirhir\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/645\"\u003ejd/tenacity#645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kozlek\"\u003e\u003ccode\u003e@​kozlek\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/733\"\u003ejd/tenacity#733\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/arindamsikder\"\u003e\u003ccode\u003e@​arindamsikder\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/725\"\u003ejd/tenacity#725\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jd/tenacity/compare/9.2.0...9.2.1\"\u003ehttps://github.com/jd/tenacity/compare/9.2.0...9.2.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e9.2.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix ordinal suffix generation for large numbers ending in 11, 12, 13 by \u003ca href=\"https://github.com/ArmaanjeetSandhu\"\u003e\u003ccode\u003e@​ArmaanjeetSandhu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/556\"\u003ejd/tenacity#556\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: replace tox with poethepoet + uv by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/558\"\u003ejd/tenacity#558\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix README badges by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/559\"\u003ejd/tenacity#559\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add project URLs to pyproject.toml by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/560\"\u003ejd/tenacity#560\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add local dev commands to contribute section by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/561\"\u003ejd/tenacity#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: modernize async examples by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/562\"\u003ejd/tenacity#562\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: set version in sphinx conf by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/563\"\u003ejd/tenacity#563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve tornado mypy errors instead of suppressing them by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/568\"\u003ejd/tenacity#568\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add poe fmt task for auto-formatting by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/569\"\u003ejd/tenacity#569\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: replace curio example with trio by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/570\"\u003ejd/tenacity#570\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: enable ruff I, UP, B rules and auto-fix codebase by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/571\"\u003ejd/tenacity#571\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: harden release workflow by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/575\"\u003ejd/tenacity#575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use typing.Self on Python 3.11+ instead of typing_extensions by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/576\"\u003ejd/tenacity#576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump tornado version floor to \u0026gt;=6.0 by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/578\"\u003ejd/tenacity#578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clean up sphinx conf.py by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/579\"\u003ejd/tenacity#579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove stale noqa comments from \u003cstrong\u003einit\u003c/strong\u003e.py by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/577\"\u003ejd/tenacity#577\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: enable additional ruff rules and fix violations by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/584\"\u003ejd/tenacity#584\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: enable mypy strict mode in all test files by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/585\"\u003ejd/tenacity#585\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: make LoggerProtocol compatible with logging.Logger by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/586\"\u003ejd/tenacity#586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove unused IterState.delay_since_first_attempt field by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/587\"\u003ejd/tenacity#587\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove redundant raise before reraise() by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/588\"\u003ejd/tenacity#588\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: replace deprecated typing.Pattern with re.Pattern by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/589\"\u003ejd/tenacity#589\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix typos in docstrings by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/590\"\u003ejd/tenacity#590\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/jd/tenacity/commit/4410996dd9a96864a2733ce0778bcaa112b72811\"\u003e\u003ccode\u003e4410996\u003c/code\u003e\u003c/a\u003e ci: check built distributions with twine (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/b23844175feb8c62f4ebb0ef0833d993f439fa1f\"\u003e\u003ccode\u003eb238441\u003c/code\u003e\u003c/a\u003e fix: restore PyPI-compatible package description (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/b6201eceedfc719e996dcbc3f6c17f21011fb236\"\u003e\u003ccode\u003eb6201ec\u003c/code\u003e\u003c/a\u003e fix: only treat None and 0 as \u0026quot;no wait\u0026quot; (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/4a74682e0186b5f2d25906aa190cd639c705a958\"\u003e\u003ccode\u003e4a74682\u003c/code\u003e\u003c/a\u003e ci: drop the Mergify queue rule (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/739\"\u003e#739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/91169719f4fd127d680cafe026f1f95f04292094\"\u003e\u003ccode\u003e9116971\u003c/code\u003e\u003c/a\u003e ci: drop Mergify dismiss_reviews rule (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/737\"\u003e#737\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/2374b61424aab29769c3428b06d576ffc1a5a1d9\"\u003e\u003ccode\u003e2374b61\u003c/code\u003e\u003c/a\u003e ci: rely on the ruleset for the ci-gate check (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/736\"\u003e#736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/6df1aab1a2df84f2779f5f308c6171df9d051a35\"\u003e\u003ccode\u003e6df1aab\u003c/code\u003e\u003c/a\u003e ci: gate merges on a single ci-gate job (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/734\"\u003e#734\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/5f540fad77cbd90b4bcb21a9b859d5b07c08ba54\"\u003e\u003ccode\u003e5f540fa\u003c/code\u003e\u003c/a\u003e chore(mergify): replace deprecated autoqueue with auto_merge_conditions (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/8be01b1daf2010566fd936a5c2214efefa43edff\"\u003e\u003ccode\u003e8be01b1\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump ruff from 0.16.5 to 0.16.9 in the python group (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/3e58094d3bc414975aad9eadf343a32bdb3b89b3\"\u003e\u003ccode\u003e3e58094\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump the python group with 2 updates (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/707\"\u003e#707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jd/tenacity/compare/9.1.4...9.2.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `regex` from 2026.9.10 to 2026.9.29\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mrabarnett/mrab-regex/blob/hg/changelog.txt\"\u003eregex's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eVersion: 2026.9.29\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eUpdated to Unicode 18.0.0.\n\u003cp\u003eSwitched to using stdbool.h and stdint.h.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eVersion: 2026.9.19\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eGit issue 619: `Match.expand()` segfaults after `detach_string()` when the template references a group\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.9.10\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eFixed version.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.9.9\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ePR [#615](https://github.com/mrabarnett/mrab-regex/issues/615): Fix Python API error propagation in match helpers\n\u003cp\u003ePR \u003ca href=\"https://redirect.github.com/mrabarnett/mrab-regex/issues/616\"\u003e#616\u003c/a\u003e: Preserve Python Exceptions in Input Decoding and String Detachment\u003c/p\u003e\n\u003cp\u003ePR \u003ca href=\"https://redirect.github.com/mrabarnett/mrab-regex/issues/617\"\u003e#617\u003c/a\u003e: Prevent Invalid Pointer Use and Exception State Corruption in Byte String Joining\u003c/p\u003e\n\u003cp\u003ePR \u003ca href=\"https://redirect.github.com/mrabarnett/mrab-regex/issues/618\"\u003e#618\u003c/a\u003e: Propagate Allocation and Internal Errors During Pattern Compilation and Scanner Execution\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eVersion: 2026.9.3\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eNew version of cibuildwheel no longer supports building for free-threaded Python 3.13.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.9.2\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eNew version of cibuildwheel no longer needs nor supports cpython-freethreading option.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.9.1\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eUpdated cibuildwheel.\nSupport Python 3.15.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.8.31\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eFixed version.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.8.30\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eGit issue 611: Heap out-of-bounds write at compile time\nGit issue 612: count_one() size underflow through the stale required-string cache\nGit issue 613: (*SKIP) inside an atomic group, plus an equality-only scan stop\nGit issue 614: build_GROUP() does not propagate the match direction\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.8.12\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/0e8cb0596ba6572c66e5d153a1d7c901b381e15e\"\u003e\u003ccode\u003e0e8cb05\u003c/code\u003e\u003c/a\u003e Updated to Unicode 18.0.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/85e568c0e0be620b4ebe50c98ea92415f5995ffc\"\u003e\u003ccode\u003e85e568c\u003c/code\u003e\u003c/a\u003e Git issue 619: \u003ccode\u003eMatch.expand()\u003c/code\u003e segfaults after \u003ccode\u003edetach_string()\u003c/code\u003e when the te...\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mrabarnett/mrab-regex/compare/2026.9.10...2026.9.29\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.16.8 to 0.17.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.17.1\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.17.1\u003c/h2\u003e\n\u003cp\u003e|  File  | Platform | Checksum |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.17.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-09.\u003c/p\u003e\n\u003cp\u003eThe executables in our macOS and Windows release archives and \u003ccode\u003eruff\u003c/code\u003e wheels are now code-signed.\nmacOS executables are signed with an Apple Developer ID certificate and notarized by Apple. Windows\nexecutables have timestamped Authenticode signatures from Azure Artifact Signing. This enables\nverification of the release publisher and binary integrity, supports publisher-based allowlisting,\nand should reduce security warnings and antivirus false positives.\u003c/p\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate the default and latest Python versions for 3.15 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28792\"\u003e#28792\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eRuff now defaults to Python 3.11 instead of 3.10 when no Python version is configured through\n\u003ca href=\"https://docs.astral.sh/ruff/settings/#target-version\"\u003e\u003ccode\u003etarget-version\u003c/code\u003e\u003c/a\u003e or\n\u003ca href=\"https://docs.astral.sh/ruff/configuration/#inferring-the-python-version\"\u003e\u003ccode\u003erequires-python\u003c/code\u003e\u003c/a\u003e. When\nchecking for syntax errors without a configured Python version, Ruff now defaults to Python 3.15\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/astral-sh/ruff/commit/4683270c69cbdaf6ad64d3f983fc458d5a43b41f\"\u003e\u003ccode\u003e4683270\u003c/code\u003e\u003c/a\u003e Bump version to 0.17.1 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29420\"\u003e#29420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3514027edb659bbc3c787d355be9d130e5587f15\"\u003e\u003ccode\u003e3514027\u003c/code\u003e\u003c/a\u003e [ty] Update typing conformance suite pin (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29417\"\u003e#29417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/829455624d78f2e89669e4b4b14af2b96abdb1ae\"\u003e\u003ccode\u003e8294556\u003c/code\u003e\u003c/a\u003e Update referenced PR security-review workflow (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29237\"\u003e#29237\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d1e1b1f69b511df4385f64b510eeec4da01c1a0e\"\u003e\u003ccode\u003ed1e1b1f\u003c/code\u003e\u003c/a\u003e [ty] Preserve recursive aliases when rebuilding intersections (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29057\"\u003e#29057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/93526150df078af7dd8fc4226cdcc469539d2001\"\u003e\u003ccode\u003e9352615\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/83a3afc3156d73ae4296f3fa74ede28e4c72bfcd\"\u003e\u003ccode\u003e83a3afc\u003c/code\u003e\u003c/a\u003e Fix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/b42a8734410230f4529151782cae951b99bed858\"\u003e\u003ccode\u003eb42a873\u003c/code\u003e\u003c/a\u003e [ty] Clarify object attribute write-contract rationale (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29384\"\u003e#29384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d01678ebf594c97a7767d4372061c1f80ae5b5bb\"\u003e\u003ccode\u003ed01678e\u003c/code\u003e\u003c/a\u003e [ty] Clarify object attribute write-contract rationale (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29384\"\u003e#29384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/355b42a7719d8a555e3ee50c89848b42d8a11eb5\"\u003e\u003ccode\u003e355b42a\u003c/code\u003e\u003c/a\u003e [ty] Avoid writable override contracts from object (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29373\"\u003e#29373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e26e6d2a54ac2c5e1f5b1945042de3ff3885bf8e\"\u003e\u003ccode\u003ee26e6d2\u003c/code\u003e\u003c/a\u003e [ty] Collect intersection inference through constraint relations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28677\"\u003e#28677\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.16.8...0.17.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/pedrotramos/BrickFill/pull/7","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrotramos%2FBrickFill/issues/7","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/7/packages"}},{"old_version":"2.13.5","new_version":"2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-23T08:57:21.000Z","version_change":"2.13.5 → 2.14.1","issue":{"uuid":"5994905600","node_id":"PR_kwDOTZL20M8AAAABKNnXcw","number":104,"state":"open","title":"build: bump the python-production-updates group across 1 directory with 7 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-23T08:57:21.000Z","updated_at":"2026-10-23T09:01:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build: bump","group_name":"python-production-updates","update_count":7,"packages":[{"name":"python-dotenv","old_version":"1.2.3","new_version":"1.2.4","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"typer","old_version":"0.27.2","new_version":"0.27.3","repository_url":"https://github.com/fastapi/typer"},{"name":"tenacity","old_version":"9.1.4","new_version":"9.2.1","repository_url":"https://github.com/jd/tenacity"},{"name":"aiohttp","old_version":"3.14.3","new_version":"3.14.5","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"yaspin","old_version":"3.5.0","new_version":"3.5.1","repository_url":"https://github.com/pavdmyt/yaspin"},{"name":"pyrate-limiter","old_version":"4.5.0","new_version":"4.5.1","repository_url":"https://github.com/vutran1710/PyrateLimiter"},{"name":"pydantic","old_version":"2.13.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-production-updates group with 7 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.3` | `1.2.4` |\n| [typer](https://github.com/fastapi/typer) | `0.27.2` | `0.27.3` |\n| [tenacity](https://github.com/jd/tenacity) | `9.1.4` | `9.2.1` |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.14.3` | `3.14.5` |\n| [yaspin](https://github.com/pavdmyt/yaspin) | `3.5.0` | `3.5.1` |\n| [pyrate-limiter](https://github.com/vutran1710/PyrateLimiter) | `4.5.0` | `4.5.1` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.5` | `2.14.1` |\n\n\nUpdates `python-dotenv` from 1.2.3 to 1.2.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003edotenv get\u003c/code\u003e no longer exits with code 1 for empty string values (\u003ccode\u003eKEY=\u003c/code\u003e) by [\u003ca href=\"https://github.com/ShamikOfficial\"\u003e\u003ccode\u003e@​ShamikOfficial\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAn unquoted empty value followed by an inline comment (e.g. \u003ccode\u003eKEY= # comment\u003c/code\u003e) is now parsed as an empty string instead of the comment text by [\u003ca href=\"https://github.com/Noethix55555\"\u003e\u003ccode\u003e@​Noethix55555\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run --no-override\u003c/code\u003e now expands variable references with the same precedence as \u003ccode\u003eload_dotenv(override=False)\u003c/code\u003e, so a value like \u003ccode\u003e${BASE}/suffix\u003c/code\u003e uses the existing \u003ccode\u003eBASE\u003c/code\u003e from the environment instead of the one from the \u003ccode\u003e.env\u003c/code\u003e file by [\u003ca href=\"https://github.com/ROTl24\"\u003e\u003ccode\u003e@​ROTl24\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\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/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.4] - 2026-10-01\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003edotenv get\u003c/code\u003e no longer exits with code 1 for empty string values (\u003ccode\u003eKEY=\u003c/code\u003e) by [\u003ca href=\"https://github.com/ShamikOfficial\"\u003e\u003ccode\u003e@​ShamikOfficial\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAn unquoted empty value followed by an inline comment (e.g. \u003ccode\u003eKEY= # comment\u003c/code\u003e) is now parsed as an empty string instead of the comment text by [\u003ca href=\"https://github.com/Noethix55555\"\u003e\u003ccode\u003e@​Noethix55555\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run --no-override\u003c/code\u003e now expands variable references with the same precedence as \u003ccode\u003eload_dotenv(override=False)\u003c/code\u003e, so a value like \u003ccode\u003e${BASE}/suffix\u003c/code\u003e uses the existing \u003ccode\u003eBASE\u003c/code\u003e from the environment instead of the one from the \u003ccode\u003e.env\u003c/code\u003e file by [\u003ca href=\"https://github.com/ROTl24\"\u003e\u003ccode\u003e@​ROTl24\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\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/theskumar/python-dotenv/commit/a565c2cc41599c48eabc6b7b7f5b826d43c5a6d7\"\u003e\u003ccode\u003ea565c2c\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.3 → 1.2.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a7abd00261e51baba958e15f443c66165042ea2\"\u003e\u003ccode\u003e4a7abd0\u003c/code\u003e\u003c/a\u003e docs: add 1.2.4 release notes (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f215c0274dc4c310e5ca5feb4c6bddade25ece21\"\u003e\u003ccode\u003ef215c02\u003c/code\u003e\u003c/a\u003e fix: dotenv get exits 0 for empty string values (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/700\"\u003e#700\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/58f2d7c112235b347040bb5cb579d4ebc0a0ad91\"\u003e\u003ccode\u003e58f2d7c\u003c/code\u003e\u003c/a\u003e test: make test_run_with_command_flags portable and meaningful (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/709\"\u003e#709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e0310e5bb3f2b701b11bbc007ca0c82c1bd56f38\"\u003e\u003ccode\u003ee0310e5\u003c/code\u003e\u003c/a\u003e fix: honor --no-override when expanding variables in dotenv run (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/698\"\u003e#698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/a00cb2eed0704cd6d2071b2004c37e95ccc86ee5\"\u003e\u003ccode\u003ea00cb2e\u003c/code\u003e\u003c/a\u003e docs: add CHANGELOG entry for \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/663\"\u003e#663\u003c/a\u003e (fix \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/600\"\u003e#600\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f5485a61eefa5e686d6d5bdc7aa9ad6b104b1e92\"\u003e\u003ccode\u003ef5485a6\u003c/code\u003e\u003c/a\u003e fix: parse empty unquoted value with inline comment as empty string\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.3...v1.2.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typer` from 0.27.2 to 0.27.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/typer/releases\"\u003etyper's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.27.3\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Escape terminal control characters in error messages. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1972\"\u003e#1972\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump pyjwt from 2.13.0 to 2.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1969\"\u003e#1969\u003c/a\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 urllib3 from 2.7.0 to 2.8.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1968\"\u003e#1968\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 11.0 to 11.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1924\"\u003e#1924\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 7 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1966\"\u003e#1966\u003c/a\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 cryptography from 48.0.1 to 50.0.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1920\"\u003e#1920\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1967\"\u003e#1967\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 3 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1965\"\u003e#1965\u003c/a\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 anyio from 4.12.0 to 4.14.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1959\"\u003e#1959\u003c/a\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✅ Fix flaky \u003ccode\u003eapp_dir\u003c/code\u003e and \u003ccode\u003elaunch\u003c/code\u003e tutorial tests under \u003ccode\u003exdist\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1951\"\u003e#1951\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1948\"\u003e#1948\u003c/a\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 annotated-doc from 0.0.4 to 0.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1949\"\u003e#1949\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1950\"\u003e#1950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1947\"\u003e#1947\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/typer/blob/master/docs/release-notes.md\"\u003etyper's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.27.3 (2026-10-06)\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Escape terminal control characters in error messages. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1972\"\u003e#1972\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump pyjwt from 2.13.0 to 2.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1969\"\u003e#1969\u003c/a\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 urllib3 from 2.7.0 to 2.8.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1968\"\u003e#1968\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 11.0 to 11.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1924\"\u003e#1924\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 7 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1966\"\u003e#1966\u003c/a\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 cryptography from 48.0.1 to 50.0.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1920\"\u003e#1920\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1967\"\u003e#1967\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 3 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1965\"\u003e#1965\u003c/a\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 anyio from 4.12.0 to 4.14.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1959\"\u003e#1959\u003c/a\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✅ Fix flaky \u003ccode\u003eapp_dir\u003c/code\u003e and \u003ccode\u003elaunch\u003c/code\u003e tutorial tests under \u003ccode\u003exdist\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1951\"\u003e#1951\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1948\"\u003e#1948\u003c/a\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 annotated-doc from 0.0.4 to 0.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1949\"\u003e#1949\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1950\"\u003e#1950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1947\"\u003e#1947\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/b15210b71a5b9b35be82a1ffdb172ef7b3a89d85\"\u003e\u003ccode\u003eb15210b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.27.3 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1973\"\u003e#1973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/8bfe6d1599d19fd2175722dc9b9cb576e331c43d\"\u003e\u003ccode\u003e8bfe6d1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/a74010f845e8771e574cc9a033cd53f449383c61\"\u003e\u003ccode\u003ea74010f\u003c/code\u003e\u003c/a\u003e 🐛 Escape terminal control characters in error messages (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1972\"\u003e#1972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/11b083b92126fb8e149ab9e7d5c9a0f5594dfe58\"\u003e\u003ccode\u003e11b083b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/910a474f3071012c3c512aad3b6e10c6e9af9dcf\"\u003e\u003ccode\u003e910a474\u003c/code\u003e\u003c/a\u003e ⬆ Bump pyjwt from 2.13.0 to 2.15.0 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1969\"\u003e#1969\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/33b1eec0e20df3695de0b4ad7af0dff89608b12b\"\u003e\u003ccode\u003e33b1eec\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/62f1d4acd95c52c12490d313d2dea27846d23f46\"\u003e\u003ccode\u003e62f1d4a\u003c/code\u003e\u003c/a\u003e ⬆ Bump urllib3 from 2.7.0 to 2.8.0 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1968\"\u003e#1968\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/ffc8b9ae61d98fd48d52494e3f7286fda763fbe5\"\u003e\u003ccode\u003effc8b9a\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/1b7ceee5da625df3c679a55f9e6d25e31ab5f5c2\"\u003e\u003ccode\u003e1b7ceee\u003c/code\u003e\u003c/a\u003e ⬆ Bump pymdown-extensions from 11.0 to 11.0.1 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1924\"\u003e#1924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/40c39c11ce29ea0272134a0a50b2668105cd714f\"\u003e\u003ccode\u003e40c39c1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/typer/compare/0.27.2...0.27.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tenacity` from 9.1.4 to 9.2.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jd/tenacity/releases\"\u003etenacity's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.2.1\u003c/h2\u003e\n\u003cp\u003e9.2.0 was tagged but never reached PyPI: the upload rejected its package description (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/714\"\u003e#714\u003c/a\u003e). 9.2.1 is the first release on PyPI with everything in \u003ca href=\"https://github.com/jd/tenacity/releases/tag/9.2.0\"\u003e9.2.0\u003c/a\u003e, plus the changes below.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore(mypy): drop vestigial tornado ignore_missing_imports override by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/676\"\u003ejd/tenacity#676\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: annotate wait_base.\u003cstrong\u003eradd\u003c/strong\u003e as taking the int seed from sum() by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/677\"\u003ejd/tenacity#677\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(mypy): enable the strictness options \u003ccode\u003estrict\u003c/code\u003e leaves off by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/678\"\u003ejd/tenacity#678\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: drop always-true truthiness checks and enable truthy-bool by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/679\"\u003ejd/tenacity#679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: declare BaseAction's REPR_FIELDS and NAME as ClassVar by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/680\"\u003ejd/tenacity#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: fix possibly-undefined and deprecated call sites by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/681\"\u003ejd/tenacity#681\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: mark overridden methods with \u003ca href=\"https://github.com/override\"\u003e\u003ccode\u003e@​override\u003c/code\u003e\u003c/a\u003e by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/682\"\u003ejd/tenacity#682\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: restore support for falsy wait values and callable + strategy by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/694\"\u003ejd/tenacity#694\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: read the tornado global live instead of an import-time snapshot by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/696\"\u003ejd/tenacity#696\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect enabled=False on the direct-call path by \u003ca href=\"https://github.com/mahirhir\"\u003e\u003ccode\u003e@​mahirhir\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/645\"\u003ejd/tenacity#645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: only treat None and 0 as \u0026quot;no wait\u0026quot; by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/741\"\u003ejd/tenacity#741\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: restore PyPI-compatible package description by \u003ca href=\"https://github.com/arindamsikder\"\u003e\u003ccode\u003e@​arindamsikder\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/725\"\u003ejd/tenacity#725\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: check built distributions with twine by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/742\"\u003ejd/tenacity#742\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/mahirhir\"\u003e\u003ccode\u003e@​mahirhir\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/645\"\u003ejd/tenacity#645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kozlek\"\u003e\u003ccode\u003e@​kozlek\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/733\"\u003ejd/tenacity#733\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/arindamsikder\"\u003e\u003ccode\u003e@​arindamsikder\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/725\"\u003ejd/tenacity#725\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jd/tenacity/compare/9.2.0...9.2.1\"\u003ehttps://github.com/jd/tenacity/compare/9.2.0...9.2.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e9.2.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix ordinal suffix generation for large numbers ending in 11, 12, 13 by \u003ca href=\"https://github.com/ArmaanjeetSandhu\"\u003e\u003ccode\u003e@​ArmaanjeetSandhu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/556\"\u003ejd/tenacity#556\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: replace tox with poethepoet + uv by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/558\"\u003ejd/tenacity#558\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix README badges by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/559\"\u003ejd/tenacity#559\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add project URLs to pyproject.toml by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/560\"\u003ejd/tenacity#560\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add local dev commands to contribute section by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/561\"\u003ejd/tenacity#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: modernize async examples by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/562\"\u003ejd/tenacity#562\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: set version in sphinx conf by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/563\"\u003ejd/tenacity#563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve tornado mypy errors instead of suppressing them by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/568\"\u003ejd/tenacity#568\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add poe fmt task for auto-formatting by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/569\"\u003ejd/tenacity#569\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: replace curio example with trio by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/570\"\u003ejd/tenacity#570\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: enable ruff I, UP, B rules and auto-fix codebase by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/571\"\u003ejd/tenacity#571\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: harden release workflow by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/575\"\u003ejd/tenacity#575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use typing.Self on Python 3.11+ instead of typing_extensions by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/576\"\u003ejd/tenacity#576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump tornado version floor to \u0026gt;=6.0 by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/578\"\u003ejd/tenacity#578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clean up sphinx conf.py by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/579\"\u003ejd/tenacity#579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove stale noqa comments from \u003cstrong\u003einit\u003c/strong\u003e.py by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/577\"\u003ejd/tenacity#577\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: enable additional ruff rules and fix violations by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/584\"\u003ejd/tenacity#584\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: enable mypy strict mode in all test files by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/585\"\u003ejd/tenacity#585\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: make LoggerProtocol compatible with logging.Logger by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/586\"\u003ejd/tenacity#586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove unused IterState.delay_since_first_attempt field by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/587\"\u003ejd/tenacity#587\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: remove redundant raise before reraise() by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/588\"\u003ejd/tenacity#588\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: replace deprecated typing.Pattern with re.Pattern by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/589\"\u003ejd/tenacity#589\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix typos in docstrings by \u003ca href=\"https://github.com/jd\"\u003e\u003ccode\u003e@​jd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jd/tenacity/pull/590\"\u003ejd/tenacity#590\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/jd/tenacity/commit/4410996dd9a96864a2733ce0778bcaa112b72811\"\u003e\u003ccode\u003e4410996\u003c/code\u003e\u003c/a\u003e ci: check built distributions with twine (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/b23844175feb8c62f4ebb0ef0833d993f439fa1f\"\u003e\u003ccode\u003eb238441\u003c/code\u003e\u003c/a\u003e fix: restore PyPI-compatible package description (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/b6201eceedfc719e996dcbc3f6c17f21011fb236\"\u003e\u003ccode\u003eb6201ec\u003c/code\u003e\u003c/a\u003e fix: only treat None and 0 as \u0026quot;no wait\u0026quot; (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/4a74682e0186b5f2d25906aa190cd639c705a958\"\u003e\u003ccode\u003e4a74682\u003c/code\u003e\u003c/a\u003e ci: drop the Mergify queue rule (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/739\"\u003e#739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/91169719f4fd127d680cafe026f1f95f04292094\"\u003e\u003ccode\u003e9116971\u003c/code\u003e\u003c/a\u003e ci: drop Mergify dismiss_reviews rule (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/737\"\u003e#737\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/2374b61424aab29769c3428b06d576ffc1a5a1d9\"\u003e\u003ccode\u003e2374b61\u003c/code\u003e\u003c/a\u003e ci: rely on the ruleset for the ci-gate check (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/736\"\u003e#736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/6df1aab1a2df84f2779f5f308c6171df9d051a35\"\u003e\u003ccode\u003e6df1aab\u003c/code\u003e\u003c/a\u003e ci: gate merges on a single ci-gate job (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/734\"\u003e#734\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/5f540fad77cbd90b4bcb21a9b859d5b07c08ba54\"\u003e\u003ccode\u003e5f540fa\u003c/code\u003e\u003c/a\u003e chore(mergify): replace deprecated autoqueue with auto_merge_conditions (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/8be01b1daf2010566fd936a5c2214efefa43edff\"\u003e\u003ccode\u003e8be01b1\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump ruff from 0.16.5 to 0.16.9 in the python group (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jd/tenacity/commit/3e58094d3bc414975aad9eadf343a32bdb3b89b3\"\u003e\u003ccode\u003e3e58094\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump the python group with 2 updates (\u003ca href=\"https://redirect.github.com/jd/tenacity/issues/707\"\u003e#707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jd/tenacity/compare/9.1.4...9.2.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `aiohttp` from 3.14.3 to 3.14.5\nUpdates `yaspin` from 3.5.0 to 3.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pavdmyt/yaspin/releases\"\u003eyaspin's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.5.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eci: add Python 3.15-dev to the version matrix by \u003ca href=\"https://github.com/pavdmyt\"\u003e\u003ccode\u003e@​pavdmyt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pavdmyt/yaspin/pull/274\"\u003epavdmyt/yaspin#274\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: prevent hidden spinner frame race by \u003ca href=\"https://github.com/pavdmyt\"\u003e\u003ccode\u003e@​pavdmyt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pavdmyt/yaspin/pull/275\"\u003epavdmyt/yaspin#275\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pavdmyt/yaspin/compare/v3.5.0...v3.5.1\"\u003ehttps://github.com/pavdmyt/yaspin/compare/v3.5.0...v3.5.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/pavdmyt/yaspin/blob/master/HISTORY.rst\"\u003eyaspin's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.5.1 / 2026-09-18\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent a stale spinner frame from being written after \u003ccode\u003ehide()\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/pavdmyt/yaspin/commit/7db744cd0478fd1f4bfbdb0201bad1253fecb13b\"\u003e\u003ccode\u003e7db744c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pavdmyt/yaspin/issues/276\"\u003e#276\u003c/a\u003e from pavdmyt/version_3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pavdmyt/yaspin/commit/340c07f3d67783f2bea78280bacaad73310cc9a1\"\u003e\u003ccode\u003e340c07f\u003c/code\u003e\u003c/a\u003e release: bump version, update history\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pavdmyt/yaspin/commit/fd62d36639fa54935e9ff205bddaf03a1736f50e\"\u003e\u003ccode\u003efd62d36\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pavdmyt/yaspin/issues/275\"\u003e#275\u003c/a\u003e from pavdmyt/pavdmyt/fix-hidden-spinner-race_20260918\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pavdmyt/yaspin/commit/913a532256d74be89b6841d90b734e229031ef44\"\u003e\u003ccode\u003e913a532\u003c/code\u003e\u003c/a\u003e fix: prevent hidden spinner frame race\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pavdmyt/yaspin/commit/4243ba16500f6754cbfcd7d24629f559bae49eba\"\u003e\u003ccode\u003e4243ba1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pavdmyt/yaspin/issues/274\"\u003e#274\u003c/a\u003e from pavdmyt/pavdmyt/add-python-3.15-dev-in-ci_20260917\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pavdmyt/yaspin/commit/2af4efebf5745fbd8d03448cbe41be1e5c0848a6\"\u003e\u003ccode\u003e2af4efe\u003c/code\u003e\u003c/a\u003e ci: isolate semgrep from Python version jobs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pavdmyt/yaspin/commit/adf0d06317e0c740efea9d6b77d19790eb2f3ba8\"\u003e\u003ccode\u003eadf0d06\u003c/code\u003e\u003c/a\u003e ci: enable PyO3 prerelease compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pavdmyt/yaspin/commit/7dc35f17c741be32a8562f10f0cb9731e82de59e\"\u003e\u003ccode\u003e7dc35f1\u003c/code\u003e\u003c/a\u003e ci: add Python 3.15-dev to the version matrix\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pavdmyt/yaspin/compare/v3.5.0...v3.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyrate-limiter` from 4.5.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/vutran1710/PyrateLimiter/releases\"\u003epyrate-limiter's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.5.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: close buckets in BucketFactory.close() by \u003ca href=\"https://github.com/ArmaanjeetSandhu\"\u003e\u003ccode\u003e@​ArmaanjeetSandhu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/314\"\u003evutran1710/PyrateLimiter#314\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(limiter): as_decorator silently ran the wrapped function when denied by \u003ca href=\"https://github.com/si-kui-a\"\u003e\u003ccode\u003e@​si-kui-a\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/315\"\u003evutran1710/PyrateLimiter#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStabilize SQLite-backed tests on Python 3.14t by closing leaked test resources by \u003ca href=\"https://github.com/vutran1710\"\u003e\u003ccode\u003e@​vutran1710\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/316\"\u003evutran1710/PyrateLimiter#316\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix async wrapper waits for state buckets by \u003ca href=\"https://github.com/bensynapse\"\u003e\u003ccode\u003e@​bensynapse\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/317\"\u003evutran1710/PyrateLimiter#317\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBenchmark weighted Redis put latency by \u003ca href=\"https://github.com/amir-h-rassafi\"\u003e\u003ccode\u003e@​amir-h-rassafi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/306\"\u003evutran1710/PyrateLimiter#306\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(postgres): read peeked timestamps through the session time zone by \u003ca href=\"https://github.com/ZacKienzle2\"\u003e\u003ccode\u003e@​ZacKienzle2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/321\"\u003evutran1710/PyrateLimiter#321\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(postgres): key the table-creation advisory lock by CRC-32, not hash() by \u003ca href=\"https://github.com/ZacKienzle2\"\u003e\u003ccode\u003e@​ZacKienzle2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/320\"\u003evutran1710/PyrateLimiter#320\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix stale timestamps after async limiter waits by \u003ca href=\"https://github.com/PLPeeters\"\u003e\u003ccode\u003e@​PLPeeters\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/318\"\u003evutran1710/PyrateLimiter#318\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/ArmaanjeetSandhu\"\u003e\u003ccode\u003e@​ArmaanjeetSandhu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/314\"\u003evutran1710/PyrateLimiter#314\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/si-kui-a\"\u003e\u003ccode\u003e@​si-kui-a\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/315\"\u003evutran1710/PyrateLimiter#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bensynapse\"\u003e\u003ccode\u003e@​bensynapse\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/317\"\u003evutran1710/PyrateLimiter#317\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ZacKienzle2\"\u003e\u003ccode\u003e@​ZacKienzle2\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/321\"\u003evutran1710/PyrateLimiter#321\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PLPeeters\"\u003e\u003ccode\u003e@​PLPeeters\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/pull/318\"\u003evutran1710/PyrateLimiter#318\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/vutran1710/PyrateLimiter/compare/v4.5.0...v4.5.1\"\u003ehttps://github.com/vutran1710/PyrateLimiter/compare/v4.5.0...v4.5.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/vutran1710/PyrateLimiter/blob/master/CHANGELOG.md\"\u003epyrate-limiter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[4.5.1]\u003c/h2\u003e\n\u003cp\u003eBug fixes only. One behaviour change to note: a decorated call that the limiter\ncan never admit now raises instead of running (see the first entry).\u003c/p\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eas_decorator\u003c/code\u003e ran the wrapped function even when denied.\u003c/strong\u003e Both the sync\nand async wrappers discarded the result of \u003ccode\u003etry_acquire()\u003c/code\u003e and called the\nfunction unconditionally. With the default \u003ccode\u003eblocking=True, timeout=-1\u003c/code\u003e that\nresult is only \u003ccode\u003eFalse\u003c/code\u003e when the weight can never be admitted under the\nconfigured rates (e.g. \u003ccode\u003eweight=5\u003c/code\u003e on \u003ccode\u003eRate(2, Duration.SECOND)\u003c/code\u003e), so the\nlimiter's verdict was silently bypassed. Such calls now raise \u003ccode\u003eRuntimeError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eLimiter.close()\u003c/code\u003e never closed its buckets.\u003c/strong\u003e \u003ccode\u003eBucketFactory.close()\u003c/code\u003e read\nthe bucket list off the leaker after tearing the leaker down, so it always\niterated an empty list: SQLite connections and Postgres connection pools\nstayed open. It now snapshots the buckets first. \u003ccode\u003eSingleBucketFactory\u003c/code\u003e also\ncloses its bucket when no leak was ever scheduled; factories that hold buckets\noutside the leaker can extend the new \u003ccode\u003eBucketFactory.owned_buckets()\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAsync wrappers lost \u003ccode\u003eStateBucket\u003c/code\u003e waits.\u003c/strong\u003e \u003ccode\u003eBucketAsyncWrapper.waiting()\u003c/code\u003e\ncalled the generic log-bucket implementation instead of the wrapped bucket's,\nso GCRA / \u003ccode\u003eTokenBucket\u003c/code\u003e waits came back as \u003ccode\u003e-1\u003c/code\u003e or \u003ccode\u003e0\u003c/code\u003e. An admissible request\ncould be rejected outright, or a blocking limiter could retry without waiting.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAsync blocking retries recorded stale timestamps.\u003c/strong\u003e After an async wait the\nretry loop advanced the item's timestamp by the requested delay only. A late\nwake-up therefore recorded the acquisition in the past and let later requests\nthrough early. The timestamp is now re-read from the bucket factory's clock,\nand the deadline is enforced around the whole retry loop.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePostgresBucket\u003c/strong\u003e: the advisory lock that serialises table creation is now\nkeyed by a CRC-32 of the table name rather than \u003ccode\u003ehash()\u003c/code\u003e, which Python salts\nper interpreter. Processes sharing a database took different locks, so their\nconcurrent \u003ccode\u003eCREATE TABLE IF NOT EXISTS\u003c/code\u003e could fail with \u003ccode\u003eUniqueViolation\u003c/code\u003e on\n\u003ccode\u003epg_type_typname_nsp_index\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePostgresBucket.peek\u003c/code\u003e read timestamps as UTC.\u003c/strong\u003e The \u003ccode\u003eitem_timestamp\u003c/code\u003e column\nis a \u003ccode\u003eTIMESTAMP\u003c/code\u003e that \u003ccode\u003eTO_TIMESTAMP\u003c/code\u003e fills through the session time zone, but\n\u003ccode\u003epeek\u003c/code\u003e took its epoch as if it were UTC. Outside UTC every peeked item sat the\nzone's offset in the future, so a full bucket computed a wait of that many\nhours and blocking callers slept through it. \u003ccode\u003epeek\u003c/code\u003e now casts the column back\nthrough the session zone.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/968301de411f722235c6db152a55fa4ea77fd3c7\"\u003e\u003ccode\u003e968301d\u003c/code\u003e\u003c/a\u003e docs: changelog for v4.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/db793340ab218442091aeeaabf375fabf9fc1cdf\"\u003e\u003ccode\u003edb79334\u003c/code\u003e\u003c/a\u003e fix: refresh async retry timestamps without an extra task handoff (\u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/issues/318\"\u003e#318\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/e9c265002da6b59c92a14780d98ce084d06a4703\"\u003e\u003ccode\u003ee9c2650\u003c/code\u003e\u003c/a\u003e fix(postgres): key the table-creation advisory lock by CRC-32, not hash() (\u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/issues/320\"\u003e#320\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/3c2c03e495c0b9dcadeed5c496721d1e0d46cf25\"\u003e\u003ccode\u003e3c2c03e\u003c/code\u003e\u003c/a\u003e fix(postgres): read peeked timestamps through the session time zone (\u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/issues/321\"\u003e#321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/71f39c03aa82f0c27add10c16d10292116bfe1aa\"\u003e\u003ccode\u003e71f39c0\u003c/code\u003e\u003c/a\u003e Benchmark weighted Redis put latency (\u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/issues/306\"\u003e#306\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/4de308880723ca77480a556e6dd85accf854b306\"\u003e\u003ccode\u003e4de3088\u003c/code\u003e\u003c/a\u003e fix: preserve state bucket waits in async wrappers (\u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/issues/317\"\u003e#317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/211f6ffa6fef6b9852baf7d6ac8a3524e3aad27b\"\u003e\u003ccode\u003e211f6ff\u003c/code\u003e\u003c/a\u003e Stabilize SQLite-backed tests on Python 3.14t by closing leaked test resource...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/bdfa7e21e013a183b6a7928fd07d08c06633bf8f\"\u003e\u003ccode\u003ebdfa7e2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/issues/315\"\u003e#315\u003c/a\u003e from si-kui-a/fix/decorator-silent-bypass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/a1f69226680d3a38db7d4dc60f98ee8ae05834ba\"\u003e\u003ccode\u003ea1f6922\u003c/code\u003e\u003c/a\u003e fix(limiter): as_decorator silently ran the wrapped function when denied\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vutran1710/PyrateLimiter/commit/036e2c12500df6466a82e1d7fe0b330154f0b4f9\"\u003e\u003ccode\u003e036e2c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/vutran1710/PyrateLimiter/issues/314\"\u003e#314\u003c/a\u003e from ArmaanjeetSandhu/fix/close-buckets\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/vutran1710/PyrateLimiter/compare/v4.5.0...v4.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...v2.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/deepset-ai/haystack-enterprise-sdk/pull/104","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepset-ai%2Fhaystack-enterprise-sdk/issues/104","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/104/packages"}},{"old_version":"2.14.0","new_version":"2.14.1","update_type":"patch","path":"/fast_api_voter","pr_created_at":"2026-10-23T07:00:18.000Z","version_change":"2.14.0 → 2.14.1","issue":{"uuid":"5993439340","node_id":"PR_kwDOOBrOOM8AAAABKMciPQ","number":990,"state":"open","title":"fix(deps): Bump the patch-and-minor group in /fast_api_voter with 21 updates","user":"dependabot[bot]","labels":["dependencies","python","queued","security"],"assignees":[],"locked":false,"comments_count":5,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-23T07:00:18.000Z","updated_at":"2026-10-24T02:37:57.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"fix(deps): Bump","group_name":"patch-and-minor","update_count":21,"packages":[{"name":"fastapi","old_version":"0.143.0","new_version":"0.143.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"httptools","old_version":"0.8.0","new_version":"0.9.0","repository_url":"https://github.com/MagicStack/httptools"},{"name":"numpy","old_version":"2.5.3","new_version":"2.5.4","repository_url":"https://github.com/numpy/numpy"},{"name":"pydantic","old_version":"2.14.0","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.15.0","new_version":"2.16.0","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"sentry-sdk","old_version":"2.71.0","new_version":"2.72.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"starlette","old_version":"1.7.0","new_version":"1.8.0","repository_url":"https://github.com/Kludex/starlette"},{"name":"wrapt","old_version":"2.5.0","new_version":"2.5.1","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"aiohttp","old_version":"3.14.4","new_version":"3.14.5","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"hypothesis","old_version":"6.168.5","new_version":"6.170.0","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ruff","old_version":"0.16.10","new_version":"0.17.1","repository_url":"https://github.com/astral-sh/ruff"},{"name":"schemathesis","old_version":"4.30.0","new_version":"4.31.1","repository_url":"https://github.com/schemathesis/schemathesis"},{"name":"z3-solver","old_version":"5.1.0.0","new_version":"5.3.1.0","repository_url":"https://github.com/Z3Prover/z3"},{"name":"ast-serialize","old_version":"0.12.1","new_version":"0.13.0","repository_url":"https://github.com/mypyc/ast_serialize"},{"name":"filelock","old_version":"4.0.12","new_version":"4.2.0","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"jedi","old_version":"0.20.0","new_version":"0.20.1","repository_url":"https://github.com/davidhalter/jedi"},{"name":"markdown","old_version":"3.11","new_version":"3.11.1","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"narwhals","old_version":"2.26.0","new_version":"2.27.1","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"platformdirs","old_version":"4.12.4","new_version":"4.13.3","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"pluggy","old_version":"1.6.0","new_version":"1.7.0","repository_url":"https://github.com/pytest-dev/pluggy"},{"name":"tomlkit","old_version":"0.15.1","new_version":"0.15.2","repository_url":"https://github.com/python-poetry/tomlkit"}],"path":"/fast_api_voter","ecosystem":"pip"},"body":"Bumps the patch-and-minor group in /fast_api_voter with 21 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.143.0` | `0.143.2` |\n| [httptools](https://github.com/MagicStack/httptools) | `0.8.0` | `0.9.0` |\n| [numpy](https://github.com/numpy/numpy) | `2.5.3` | `2.5.4` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.14.0` | `2.14.1` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.15.0` | `2.16.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.71.0` | `2.72.0` |\n| [starlette](https://github.com/Kludex/starlette) | `1.7.0` | `1.8.0` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `2.5.0` | `2.5.1` |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.14.4` | `3.14.5` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.168.5` | `6.170.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.10` | `0.17.1` |\n| [schemathesis](https://github.com/schemathesis/schemathesis) | `4.30.0` | `4.31.1` |\n| [z3-solver](https://github.com/Z3Prover/z3) | `5.1.0.0` | `5.3.1.0` |\n| [ast-serialize](https://github.com/mypyc/ast_serialize) | `0.12.1` | `0.13.0` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `4.0.12` | `4.2.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.20.0` | `0.20.1` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.11` | `3.11.1` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.26.0` | `2.27.1` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.12.4` | `4.13.3` |\n| [pluggy](https://github.com/pytest-dev/pluggy) | `1.6.0` | `1.7.0` |\n| [tomlkit](https://github.com/python-poetry/tomlkit) | `0.15.1` | `0.15.2` |\n\nUpdates `fastapi` from 0.143.0 to 0.143.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.143.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix blocking frontend fallback file checks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16503\"\u003e#16503\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16500\"\u003e#16500\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16499\"\u003e#16499\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16501\"\u003e#16501\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16498\"\u003e#16498\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16497\"\u003e#16497\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16495\"\u003e#16495\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16496\"\u003e#16496\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16493\"\u003e#16493\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16494\"\u003e#16494\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16490\"\u003e#16490\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16491\"\u003e#16491\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\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/16492\"\u003e#16492\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump pydantic-ai-slim from 2.49.0 to 2.53.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16487\"\u003e#16487\u003c/a\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 werkzeug from 3.1.6 to 3.1.9. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16464\"\u003e#16464\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.143.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix included route metadata in \u003ccode\u003eiter_route_contexts()\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16484\"\u003e#16484\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ba24dc3bc011bad3efdbd68b9d529faae2c2993c\"\u003e\u003ccode\u003eba24dc3\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.143.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16504\"\u003e#16504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/98050eeaf006cf26e9a8b7f83d26fe00d74091ba\"\u003e\u003ccode\u003e98050ee\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/d0282a388b3875dfdfd69813693608676006254f\"\u003e\u003ccode\u003ed0282a3\u003c/code\u003e\u003c/a\u003e 🐛 Fix blocking frontend fallback file checks (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16503\"\u003e#16503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/db04f5b7ed05e3408be73d2c62ae04653be3b3fb\"\u003e\u003ccode\u003edb04f5b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/fd0614cac4c5eb57e08ba82c63be0824453dafe2\"\u003e\u003ccode\u003efd0614c\u003c/code\u003e\u003c/a\u003e 🌐 Update translations for zh-hant (update-outdated) (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16500\"\u003e#16500\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0c83cfae23d8068c9a3a5151ae69cac2e4e894d9\"\u003e\u003ccode\u003e0c83cfa\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/6955ff746c204465ccbc8d648d86f5545a3bb55f\"\u003e\u003ccode\u003e6955ff7\u003c/code\u003e\u003c/a\u003e 🌐 Update translations for ja (update-outdated) (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16499\"\u003e#16499\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/aa1c3bac294c51b99728ef155d99569047598e04\"\u003e\u003ccode\u003eaa1c3ba\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/f6f33b2cb225ce981ddfefcb869c000d945062c6\"\u003e\u003ccode\u003ef6f33b2\u003c/code\u003e\u003c/a\u003e 🌐 Update translations for zh (update-outdated) (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16501\"\u003e#16501\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0474a7e88d7f294cc0985bea0913bbafbb7a8a66\"\u003e\u003ccode\u003e0474a7e\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.143.0...0.143.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httptools` from 0.8.0 to 0.9.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.9.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpgrade llhttp to 9.4.3 (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/153\"\u003e#153\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in eab7f640)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBuild CPython 3.15 wheels (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/148\"\u003e#148\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e in b03516d9)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd RISC-V 64-bit wheels (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/137\"\u003e#137\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/gounthar\"\u003e\u003ccode\u003e@​gounthar\u003c/code\u003e\u003c/a\u003e in 1c6946dc)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd Windows ARM64 support in CI (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/141\"\u003e#141\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/Harishmcw\"\u003e\u003ccode\u003e@​Harishmcw\u003c/code\u003e\u003c/a\u003e in 5a2bb07c)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBuild PPC64LE wheels (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/143\"\u003e#143\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/Sunidhi-Gaonkar1\"\u003e\u003ccode\u003e@​Sunidhi-Gaonkar1\u003c/code\u003e\u003c/a\u003e in ff08b99d)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModernize test and release workflows (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/152\"\u003e#152\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in d80e26fe)\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/104198474662752f4f4845c79007100829aff442\"\u003e\u003ccode\u003e1041984\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/154\"\u003e#154\u003c/a\u003e from MagicStack/release-0.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/aa5fbf941f2e58e0b3edc408b01eb49aadcca414\"\u003e\u003ccode\u003eaa5fbf9\u003c/code\u003e\u003c/a\u003e httptools v0.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/eab7f6403887a8881ffca3a65095c317e03b02ea\"\u003e\u003ccode\u003eeab7f64\u003c/code\u003e\u003c/a\u003e Upgrade llhttp to 9.4.3 (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/153\"\u003e#153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/d80e26fe6dcc181ebd65e7a3da17448ccc5abdf4\"\u003e\u003ccode\u003ed80e26f\u003c/code\u003e\u003c/a\u003e Modernize test and release workflows (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/152\"\u003e#152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/b03516d983ac04cec750ece237cbf07cefb87900\"\u003e\u003ccode\u003eb03516d\u003c/code\u003e\u003c/a\u003e Build CPython 3.15 wheels (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/148\"\u003e#148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/ff08b99df42e957c5cfb9cddeb85ffa8378e09ca\"\u003e\u003ccode\u003eff08b99\u003c/code\u003e\u003c/a\u003e Build PPC64LE wheels (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/143\"\u003e#143\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/5a2bb07cc2be05558d692adff10e223a1e6c3bf3\"\u003e\u003ccode\u003e5a2bb07\u003c/code\u003e\u003c/a\u003e Add Windows ARM64 support in CI (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/141\"\u003e#141\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/1c6946dccdffcb7818c19ddd8bf73123b4ccd297\"\u003e\u003ccode\u003e1c6946d\u003c/code\u003e\u003c/a\u003e ci: add riscv64 to wheel build matrix (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/137\"\u003e#137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/MagicStack/httptools/compare/v0.8.0...v0.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `numpy` from 2.5.3 to 2.5.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/releases\"\u003enumpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.5.4 (Oct 10,  2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.5.4 Release Notes\u003c/h1\u003e\n\u003cp\u003e\u003cem\u003eReleased on 2026-10-10.\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eNumPy 2.5.4 is a patch release that fixes bugs discovered after the 2.5.3\nrelease. Highlights are:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMany typing fixes and improvements,\u003c/li\u003e\n\u003cli\u003eA workaround for the MSVC 19.51 bug, see below.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThis release supports Python versions 3.12-3.15.\u003c/p\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003enumpy.linalg.svd\u003c/code\u003e and \u003ccode\u003enumpy.linalg.lstsq\u003c/code\u003e now raise for inputs containing\ninfinities instead of returning garbage results.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed hangs in \u003ccode\u003enumpy.linalg.svd\u003c/code\u003e and \u003ccode\u003enumpy.linalg.lstsq\u003c/code\u003e for certain inputs\ncontaining infinities for recent versions of some LAPACK implementations.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003enumpy.linalg.cond\u003c/code\u003e now handles non-finite inputs more consistently.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32593\"\u003egh-32593\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eStringDType hashing with NaN sentinels\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eStringDType\u003c/code\u003e instances with equivalent floating-point NaN sentinels now\nhave equal hashes. Previously, distinct NaN objects could produce equal\ndtype instances with different hashes, causing dictionary lookups and set\ndeduplication to fail.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32563\"\u003egh-32563\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003ch3\u003e\u003ccode\u003eMaskedArray\u003c/code\u003e resets a fill_value that cannot be represented in a new dtype\u003c/h3\u003e\n\u003cp\u003eA fill_value copied from a source array is now reset to the default fill_value\nfor the new dtype when it cannot be represented in that dtype. Previously the\ncopied value could be stale: ufuncs that change dtype left the result holding a\nfill_value typed for the old dtype, which raised a \u003ccode\u003eTypeError\u003c/code\u003e only when\nsomething later validated it (such as \u003ccode\u003e.view()\u003c/code\u003e), and a floating point\nfill_value that overflows an integer dtype was kept as an out-of-range value\ntogether with a \u003ccode\u003eRuntimeWarning\u003c/code\u003e. Both now fall back to the default,\nincluding when a masked array is passed to \u003ccode\u003eMaskedArray\u003c/code\u003e with a different\n\u003ccode\u003edtype\u003c/code\u003e. A fill_value given explicitly by the user is still validated and\nraises as before. This can now raise a \u003ccode\u003eComplexWarning\u003c/code\u003e if the fill_value is\ncomplex and the new dtype is real.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/a3d0ef1df045b858e68115001fdabc930bb3b68c\"\u003e\u003ccode\u003ea3d0ef1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32969\"\u003e#32969\u003c/a\u003e from charris/prepare-2.5.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/087b5367c84b5296c32c26c415438d87d3888586\"\u003e\u003ccode\u003e087b536\u003c/code\u003e\u003c/a\u003e MAINT: Make OpenBLAS version check use 2.5.x branch.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/91acd879242a679604579895d490c26f864a4b03\"\u003e\u003ccode\u003e91acd87\u003c/code\u003e\u003c/a\u003e REL: Prepare for the NumPy 2.5.4 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/9cc555bae07244551829c3a4eb7a635bef6345b3\"\u003e\u003ccode\u003e9cc555b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32956\"\u003e#32956\u003c/a\u003e from charris/backport-typing-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/e04b972a306136b8ac9219be199948badafa3475\"\u003e\u003ccode\u003ee04b972\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003edtype[void].names\u003c/code\u003e: allow setting with list (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32943\"\u003e#32943\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/d9299693d20c3fd1aa83b9464d074632cf59aaac\"\u003e\u003ccode\u003ed929969\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003etimedelta64\u003c/code\u003e: \u003ccode\u003edatetime.timedelta\u003c/code\u003e construction isn't deprecated (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/839467fdbcc1d68b68f4fe2a61d3387107c78394\"\u003e\u003ccode\u003e839467f\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003ema.getmaskarray\u003c/code\u003e: accept array-likes (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32934\"\u003e#32934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/64b721b23f51543ed9316a5fd21a48734760b429\"\u003e\u003ccode\u003e64b721b\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003epolynomial\u003c/code\u003e: accept scalar \u003ccode\u003ecoef\u003c/code\u003e in the poly constructors (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32931\"\u003e#32931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/06b7ad226e41b71919b2d35c50063998eced0b9d\"\u003e\u003ccode\u003e06b7ad2\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003evoid\u003c/code\u003e: accept any \u003ccode\u003edtype: str\u003c/code\u003e in constructor calls (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32928\"\u003e#32928\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/c7bcd2c0aaca732b87575829cc61508076de1af5\"\u003e\u003ccode\u003ec7bcd2c\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003eplace\u003c/code\u003e: widen \u003ccode\u003emask\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32926\"\u003e#32926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/numpy/numpy/compare/v2.5.3...v2.5.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\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/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic/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-settings` from 2.15.0 to 2.16.0\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.16.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBreaking changes and behavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.10 is no longer supported\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1003\"\u003e#1003\u003c/a\u003e). pydantic-settings now requires Python 3.11+, since 3.10 reaches end of life this month. The \u003ccode\u003etomli\u003c/code\u003e fallback is gone in favor of stdlib \u003ccode\u003etomllib\u003c/code\u003e; the \u003ccode\u003etoml\u003c/code\u003e extra is kept as an empty extra so \u003ccode\u003epip install pydantic-settings[toml]\u003c/code\u003e keeps working.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003epython-dotenv\u0026gt;=1.2.2\u003c/code\u003e is now required\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/971\"\u003e#971\u003c/a\u003e) to pick up the fix for CVE-2026-28684.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAliases are ignored in every source when \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1033\"\u003e#1033\u003c/a\u003e). Env vars, secrets, CLI flags and defaults now use only field names, matching pydantic. An env var named after the alias is now ignored instead of raising \u003ccode\u003eextra_forbidden\u003c/code\u003e, and the CLI exposes \u003ccode\u003e--apple\u003c/code\u003e rather than \u003ccode\u003e--pomo\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003evalidation_alias\u003c/code\u003e takes precedence over \u003ccode\u003ealias\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1038\"\u003e#1038\u003c/a\u003e). When the two differ, values from JSON/YAML/TOML files and the CLI were silently ignored; they now load. CLI help lists the \u003ccode\u003evalidation_alias\u003c/code\u003e flag first, and \u003ccode\u003eCliApp.serialize\u003c/code\u003e emits it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCLI case-insensitivity only lowercases registered options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1036\"\u003e#1036\u003c/a\u003e). With \u003ccode\u003ecase_sensitive=False\u003c/code\u003e, args after \u003ccode\u003e--\u003c/code\u003e and those captured by \u003ccode\u003eCliUnknownArgs\u003c/code\u003e keep their case (\u003ccode\u003e-Xmx4G\u003c/code\u003e no longer becomes \u003ccode\u003e-xmx4g\u003c/code\u003e). Unrecognized options are now reported as typed (\u003ccode\u003e--NOPE\u003c/code\u003e instead of \u003ccode\u003e--nope\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eJSON and YAML config files are read as UTF-8 by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/955\"\u003e#955\u003c/a\u003e) instead of the locale encoding, completing the secrets-file fix from 2.15.0. \u003ccode\u003ejson_file_encoding\u003c/code\u003e/\u003ccode\u003eyaml_file_encoding\u003c/code\u003e still override it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDiscriminated union defaults are partially updated again\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/997\"\u003e#997\u003c/a\u003e). This reverts the 2.15.0 regression with \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e: the default is only dropped when the incoming value selects a \u003cem\u003edifferent\u003c/em\u003e union member.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.15 and pydantic 2.14 support\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1026\"\u003e#1026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1029\"\u003e#1029\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1022\"\u003e#1022\u003c/a\u003e). pydantic 2.14 broke \u003ccode\u003eCliApp.run\u003c/code\u003e and \u003ccode\u003evalidate_by_alias=False\u003c/code\u003e handling; both are fixed.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCached settings instances\u003c/strong\u003e via \u003ccode\u003eSettings.settings_cached()\u003c/code\u003e and \u003ccode\u003eSettings.settings_clear_cache()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/952\"\u003e#952\u003c/a\u003e). These give you a process-local singleton per settings class without hand-rolling \u003ccode\u003elru_cache\u003c/code\u003e wrappers. Calling the class directly still builds a fresh instance.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAWS Systems Manager Parameter Store source\u003c/strong\u003e — \u003ccode\u003eAWSSystemsManagerSettingsSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/941\"\u003e#941\u003c/a\u003e). It recursively reads every parameter under an \u003ccode\u003essm_path\u003c/code\u003e, with \u003ccode\u003e/\u003c/code\u003e mapping onto nested models. Install it with the new \u003ccode\u003eaws-systems-manager\u003c/code\u003e extra.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenv_file_depth\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/940\"\u003e#940\u003c/a\u003e) lets a relative \u003ccode\u003eenv_file\u003c/code\u003e be found in parent directories, mirroring \u003ccode\u003epyproject_toml_depth\u003c/code\u003e. This is useful when scripts run from a subdirectory of a monorepo. It defaults to \u003ccode\u003e0\u003c/code\u003e, which keeps the current behavior.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eCliVariadicArg\u003c/code\u003e for named variadic options\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/949\"\u003e#949\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/958\"\u003e#958\u003c/a\u003e). It accepts \u003ccode\u003e--param a b c\u003c/code\u003e in addition to repeated \u003ccode\u003e--param a --param b\u003c/code\u003e. Required fields need at least one value.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eCliApp.serialize\u003c/code\u003e output now round-trips through \u003ccode\u003eCliApp.run\u003c/code\u003e for enums, tuples, dates and \u003ccode\u003eDecimal\u003c/code\u003es (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/988\"\u003e#988\u003c/a\u003e), explicit \u003ccode\u003eNone\u003c/code\u003e values (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/981\"\u003e#981\u003c/a\u003e), empty containers (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1008\"\u003e#1008\u003c/a\u003e), \u003ccode\u003eCliVariadicArg\u003c/code\u003e values (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/976\"\u003e#976\u003c/a\u003e) and populated \u003ccode\u003eCliUnknownArgs\u003c/code\u003e fields, which previously raised \u003ccode\u003eIndexError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/992\"\u003e#992\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eEmpty JSON arrays (\u003ccode\u003e--items []\u003c/code\u003e) now give an empty list instead of \u003ccode\u003e['']\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/994\"\u003e#994\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eTuples, \u003ccode\u003efrozenset\u003c/code\u003e, \u003ccode\u003eMutableSequence\u003c/code\u003e and other collection subtypes are now treated as repeatable/variadic options (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/972\"\u003e#972\u003c/a\u003e), and so are named collection type aliases such as \u003ccode\u003eTypeAliasType('Addrs', list[IPvAnyAddress])\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1032\"\u003e#1032\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecli_exit_on_error=False\u003c/code\u003e is now honored in \u003ccode\u003eCliSubCommand\u003c/code\u003e parsers, which raise \u003ccode\u003eSettingsError\u003c/code\u003e instead of exiting (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/977\"\u003e#977\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliSubCommand\u003c/code\u003e aliases keep their case with \u003ccode\u003ecase_sensitive=False\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/989\"\u003e#989\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eEach \u003ccode\u003eCliUnknownArgs\u003c/code\u003e field now receives only its own subcommand's leftover args (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1004\"\u003e#1004\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliApp.format_help\u003c/code\u003e no longer crashes when \u003ccode\u003ecli_prefix\u003c/code\u003e is set in \u003ccode\u003emodel_config\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/945\"\u003e#945\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eType aliases and parsing\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNamed union type aliases (\u003ccode\u003eTypeAliasType('V', list[int] | str)\u003c/code\u003e) now decode like their inline equivalents in env and dotenv sources, including under \u003ccode\u003eOptional\u003c/code\u003e, \u003ccode\u003eAnnotated\u003c/code\u003e and custom validation aliases (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1006\"\u003e#1006\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1030\"\u003e#1030\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1041\"\u003e#1041\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eResolving a named \u003ccode\u003eAnnotated\u003c/code\u003e type alias no longer mutates shared \u003ccode\u003eFieldInfo\u003c/code\u003e metadata, which made validators run twice on subclasses or after \u003ccode\u003emodel_rebuild()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/979\"\u003e#979\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eA bare single-segment \u003ccode\u003eAliasPath('SOME_KEY')\u003c/code\u003e no longer tries to JSON-decode plain string values (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/980\"\u003e#980\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecollections.abc.Set\u003c/code\u003e/\u003ccode\u003eMutableSet\u003c/code\u003e/\u003ccode\u003etyping.AbstractSet\u003c/code\u003e fields now JSON-decode env values (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/973\"\u003e#973\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eA bare \u003ccode\u003etyping.Dict\u003c/code\u003e field with \u003ccode\u003eenv_nested_delimiter\u003c/code\u003e no longer raises \u003ccode\u003eIndexError\u003c/code\u003e, which was a regression in 2.13.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1009\"\u003e#1009\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCase-insensitive matching now works for nested pydantic dataclasses (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1010\"\u003e#1010\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDotenv, secrets and config files\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWith \u003ccode\u003eextra='allow'\u003c/code\u003e, a non-lowercase \u003ccode\u003eenv_prefix\u003c/code\u003e is now stripped from dotenv extras (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/959\"\u003e#959\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/968\"\u003e#968\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esecrets_case_sensitive=True\u003c/code\u003e is now honored on Windows (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1001\"\u003e#1001\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn empty JSON config file is treated as an empty mapping instead of crashing (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/947\"\u003e#947\u003c/a\u003e), matching YAML and TOML.\u003c/li\u003e\n\u003cli\u003eTOML table headers: \u003ccode\u003e~\u003c/code\u003e paths are now expanded when checking that the file exists (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1034\"\u003e#1034\u003c/a\u003e), and an explicit \u003ccode\u003etoml_table_header=()\u003c/code\u003e now overrides the model config to read the file root (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1027\"\u003e#1027\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eCloud sources\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAzure Key Vault and GCP Secret Manager now honor \u003ccode\u003eenv_parse_none_str\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1019\"\u003e#1019\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1040\"\u003e#1040\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAzure Key Vault: \u003ccode\u003edash_to_underscore=True\u003c/code\u003e now works for nested model fields (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/1025\"\u003e#1025\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eNestedSecretsSettingsSource\u003c/code\u003e now validates its specific constructor arguments (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/975\"\u003e#975\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8c259f41b49b4cefbe4fb676d3c1f52dddd3cca8\"\u003e\u003ccode\u003e8c259f4\u003c/code\u003e\u003c/a\u003e Prepare release 2.16.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1043\"\u003e#1043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/4bc667ada383aca4df00304cd171f327a9fae163\"\u003e\u003ccode\u003e4bc667a\u003c/code\u003e\u003c/a\u003e Keep case of non-option CLI args when case_sensitive=False (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f75a8057a5fafe4aef3a042c2adf367c6987f73f\"\u003e\u003ccode\u003ef75a805\u003c/code\u003e\u003c/a\u003e Simplify alias resolution branch and test alias with AliasChoices/AliasPath (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/cfdc5585e821e84905905027de68a0188213537a\"\u003e\u003ccode\u003ecfdc558\u003c/code\u003e\u003c/a\u003e Honor env_parse_none_str for GCP Secret Manager (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1040\"\u003e#1040\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/081d39f9c73f46e68bc2bef75a23f7d84ed0c377\"\u003e\u003ccode\u003e081d39f\u003c/code\u003e\u003c/a\u003e Fix config file and CLI values being ignored when alias differs from validati...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c46ebc4cc599c09f3692f4d2e82a8f0bb5433f3a\"\u003e\u003ccode\u003ec46ebc4\u003c/code\u003e\u003c/a\u003e Expand home paths when checking TOML table headers (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/6ea85e68532ed4365d7e43509369f41b5820ac74\"\u003e\u003ccode\u003e6ea85e6\u003c/code\u003e\u003c/a\u003e Decode optional Annotated named union aliases (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1041\"\u003e#1041\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ca9d7c4d7440ca35edff91a0e947f96e6381d890\"\u003e\u003ccode\u003eca9d7c4\u003c/code\u003e\u003c/a\u003e Fix JSON decoding for optional named union aliases (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1030\"\u003e#1030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/b6ddda2c8db5d8b0c13af7bafab8502ed7ea072c\"\u003e\u003ccode\u003eb6ddda2\u003c/code\u003e\u003c/a\u003e Fix CLI parsing for named collection type aliases (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1032\"\u003e#1032\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/bedb60e2cc253be2ae11003a51108c535a58757c\"\u003e\u003ccode\u003ebedb60e\u003c/code\u003e\u003c/a\u003e Honor explicit empty TOML table header overrides (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/1027\"\u003e#1027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.15.0...v2.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.71.0 to 2.72.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.72.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eAsgi\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet \u003ccode\u003euser_agent.original\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7794\"\u003e#7794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7781\"\u003e#7781\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eBoto3\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eServiceExtension\u003c/code\u003e class by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7536\"\u003e#7536\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd response, retry, and error span attributes by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7499\"\u003e#7499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd common OTel AWS client attributes by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7481\"\u003e#7481\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eWsgi\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003euser_agent.original\u003c/code\u003e attr for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7793\"\u003e#7793\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7780\"\u003e#7780\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(aiohttp) Add \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7785\"\u003e#7785\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(aiohttp,sanic,tornado) Add \u003ccode\u003euser_agent.original\u003c/code\u003e attr for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7795\"\u003e#7795\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(sanic) Add \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7783\"\u003e#7783\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(tornado) Add \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7787\"\u003e#7787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(types) Export DataCollectionUserOptions from sentry_sdk.types by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7957\"\u003e#7957\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBetter IPv6 localhost detection by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7786\"\u003e#7786\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eBoto3\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTrace the complete botocore client-call lifecycle by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7538\"\u003e#7538\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFinish \u003ccode\u003eStreamingBody\u003c/code\u003e span correctly by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7540\"\u003e#7540\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(crons) Return \u003ccode\u003eNone\u003c/code\u003e from \u003ccode\u003ecapture_checkin\u003c/code\u003e when nothing is sent by \u003ca href=\"https://github.com/HardMax71\"\u003e\u003ccode\u003e@​HardMax71\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7868\"\u003e#7868\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(scrubber) Scrub request bodies that are JSON arrays by \u003ca href=\"https://github.com/Om-singhaI\"\u003e\u003ccode\u003e@​Om-singhaI\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7561\"\u003e#7561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix span, metrics, log client reports by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7933\"\u003e#7933\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003ch4\u003eDeps\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eLock file maintenance by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7848\"\u003e#7848\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLock file maintenance by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7484\"\u003e#7484\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOpenai Agents\u003c/h4\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.72.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eAsgi\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet \u003ccode\u003euser_agent.original\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7794\"\u003e#7794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7781\"\u003e#7781\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eBoto3\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eServiceExtension\u003c/code\u003e class by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7536\"\u003e#7536\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd response, retry, and error span attributes by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7499\"\u003e#7499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd common OTel AWS client attributes by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7481\"\u003e#7481\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eWsgi\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003euser_agent.original\u003c/code\u003e attr for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7793\"\u003e#7793\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7780\"\u003e#7780\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(aiohttp) Add \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7785\"\u003e#7785\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(aiohttp,sanic,tornado) Add \u003ccode\u003euser_agent.original\u003c/code\u003e attr for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7795\"\u003e#7795\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(sanic) Add \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7783\"\u003e#7783\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(tornado) Add \u003ccode\u003esentry.is_localhost\u003c/code\u003e for inbound filters by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7787\"\u003e#7787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(types) Export DataCollectionUserOptions from sentry_sdk.types by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7957\"\u003e#7957\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBetter IPv6 localhost detection by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7786\"\u003e#7786\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eBoto3\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTrace the complete botocore client-call lifecycle by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7538\"\u003e#7538\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFinish \u003ccode\u003eStreamingBody\u003c/code\u003e span correctly by \u003ca href=\"https://github.com/pabloDeputter\"\u003e\u003ccode\u003e@​pabloDeputter\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7540\"\u003e#7540\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(crons) Return \u003ccode\u003eNone\u003c/code\u003e from \u003ccode\u003ecapture_checkin\u003c/code\u003e when nothing is sent by \u003ca href=\"https://github.com/HardMax71\"\u003e\u003ccode\u003e@​HardMax71\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7868\"\u003e#7868\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(scrubber) Scrub request bodies that are JSON arrays by \u003ca href=\"https://github.com/Om-singhaI\"\u003e\u003ccode\u003e@​Om-singhaI\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7561\"\u003e#7561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix span, metrics, log client reports by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7933\"\u003e#7933\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003ch4\u003eDeps\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eLock file maintenance by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7848\"\u003e#7848\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLock file maintenance by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7484\"\u003e#7484\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOpenai Agents\u003c/h4\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/9d245140804fb0238bf9718f53a53ee5b30f0f8d\"\u003e\u003ccode\u003e9d24514\u003c/code\u003e\u003c/a\u003e release: 2.72.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/4dc1d72fd49cf2c76b2b7a316d06f056da638150\"\u003e\u003ccode\u003e4dc1d72\u003c/code\u003e\u003c/a\u003e fix: Fix span, metrics, log client reports (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7933\"\u003e#7933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/578039961170fc5b27ab813861a5adb698372cff\"\u003e\u003ccode\u003e5780399\u003c/code\u003e\u003c/a\u003e feat(types): Export DataCollectionUserOptions from sentry_sdk.types (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7957\"\u003e#7957\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/1ca032605a337eb1dee696b594c28d7620e93ddf\"\u003e\u003ccode\u003e1ca0326\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7848\"\u003e#7848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/f5bf69bc6abebccba900b4d2606995fdfdf87a5e\"\u003e\u003ccode\u003ef5bf69b\u003c/code\u003e\u003c/a\u003e ci(mypy): Bump version to 2.4.0 (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7937\"\u003e#7937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/02210fa61b4fe2f5de849fa10984cd576118fafe\"\u003e\u003ccode\u003e02210fa\u003c/code\u003e\u003c/a\u003e ci(openai-agents): Bump version for type checking to 0.23.1 (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7935\"\u003e#7935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/fcccb7b389adde78c05d73861d766d93dc4b85d0\"\u003e\u003ccode\u003efcccb7b\u003c/code\u003e\u003c/a\u003e ci(strawberry-graphql): Bump version for type checking to 0.332.0 (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7936\"\u003e#7936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/7cb80948cbdefb10831740c23b49e56e348532a5\"\u003e\u003ccode\u003e7cb8094\u003c/code\u003e\u003c/a\u003e chore: Deprecate \u003ccode\u003eai.monitoring.record_token_usage()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7918\"\u003e#7918\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/1f4ba26cdd92ab9fe877af7b511ddff02e8bd8c5\"\u003e\u003ccode\u003e1f4ba26\u003c/code\u003e\u003c/a\u003e chore: Deprecate \u003ccode\u003esend_default_pii\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7694\"\u003e#7694\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/4b9d329880aeb696d88d735fb01956b06a46e923\"\u003e\u003ccode\u003e4b9d329\u003c/code\u003e\u003c/a\u003e refactor: move FastAPI active thread tracking into Starlette (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7825\"\u003e#7825\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.71.0...2.72.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `starlette` from 1.7.0 to 1.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/starlette/releases\"\u003estarlette's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.8.0\u003c/h2\u003e\n\u003cp\u003eThis release adds HTTP 103 Early Hints, preserves response trailers through \u003ccode\u003eGZipMiddleware\u003c/code\u003e, and stops \u003ccode\u003eFileResponse\u003c/code\u003e transfers when clients disconnect. Starlette now requires Python 3.11.\u003c/p\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eRequest.send_early_hints()\u003c/code\u003e for HTTP 103 Early Hints through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3435\"\u003e#3435\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Python 3.11 or later, dropping support for Python 3.10 \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3592\"\u003e#3592\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eExclude native gRPC media types (\u003ccode\u003eapplication/grpc\u003c/code\u003e and \u003ccode\u003eapplication/grpc+...\u003c/code\u003e) from \u003ccode\u003eGZipMiddleware\u003c/code\u003e compression by default \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSend \u003ccode\u003ehttp.response.start\u003c/code\u003e immediately in \u003ccode\u003eGZipMiddleware\u003c/code\u003e for responses with an existing \u003ccode\u003eContent-Encoding\u003c/code\u003e, status \u003ccode\u003e206\u003c/code\u003e, or an excluded content type, instead of waiting for the first body chunk \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3631\"\u003e#3631\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eResolve the multipart charset once per request instead of once per field \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3618\"\u003e#3618\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve response trailers through \u003ccode\u003eGZipMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop \u003ccode\u003eFileResponse\u003c/code\u003e transfers when the client disconnects \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3523\"\u003e#3523\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop multipart range responses when the file ends before a range is complete, instead of looping forever \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3583\"\u003e#3583\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore \u003ccode\u003eRange\u003c/code\u003e when \u003ccode\u003eIf-Range\u003c/code\u003e contains a weak ETag \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3567\"\u003e#3567\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eInclude \u003ccode\u003eAllow: GET, HEAD\u003c/code\u003e in \u003ccode\u003eStaticFiles\u003c/code\u003e \u003ccode\u003e405\u003c/code\u003e responses \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3640\"\u003e#3640\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eClose \u003ccode\u003eRequest.stream()\u003c/code\u003e generators deterministically, avoiding \u0026quot;Exception ignored\u0026quot; errors with stacked \u003ccode\u003eBaseHTTPMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3628\"\u003e#3628\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eVary: Cookie\u003c/code\u003e when \u003ccode\u003eSession.pop()\u003c/code\u003e removes an existing key \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3186\"\u003e#3186\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eEmit \u003ccode\u003eMax-Age=0\u003c/code\u003e on the session cookie when \u003ccode\u003eSessionMiddleware\u003c/code\u003e uses \u003ccode\u003emax_age=0\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3651\"\u003e#3651\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBracket IPv6 hostnames in \u003ccode\u003eURL.replace()\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3617\"\u003e#3617\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull changelog:\u003c/strong\u003e \u003ca href=\"https://github.com/Kludex/starlette/compare/1.7.0...1.8.0\"\u003e1.7.0...1.8.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/starlette/blob/main/docs/release-notes.md\"\u003estarlette's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.8.0 (October 13, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release drops Python 3.10 support and adds HTTP 103 Early Hints.\u003c/p\u003e\n\u003ch4\u003eAdded\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eRequest.send_early_hints()\u003c/code\u003e for HTTP 103 Early Hints through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3435\"\u003e#3435\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanged\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Python 3.11 or later, dropping support for Python 3.10 \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3592\"\u003e#3592\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eExclude native gRPC media types (\u003ccode\u003eapplication/grpc\u003c/code\u003e and \u003ccode\u003eapplication/grpc+...\u003c/code\u003e) from \u003ccode\u003eGZipMiddleware\u003c/code\u003e compression by default \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSend \u003ccode\u003ehttp.response.start\u003c/code\u003e immediately in \u003ccode\u003eGZipMiddleware\u003c/code\u003e for responses with an existing \u003ccode\u003eContent-Encoding\u003c/code\u003e, status \u003ccode\u003e206\u003c/code\u003e, or an excluded content type, instead of waiting for the first body chunk \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3631\"\u003e#3631\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eResolve the multipart charset once per request instead of once per field \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3618\"\u003e#3618\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixed\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve response trailers through \u003ccode\u003eGZipMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3565\"\u003e#3565\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop \u003ccode\u003eFileResponse\u003c/code\u003e transfers when the client disconnects \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3523\"\u003e#3523\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStop multipart range responses when the file ends before a range is complete, instead of looping forever \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3583\"\u003e#3583\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore \u003ccode\u003eRange\u003c/code\u003e when \u003ccode\u003eIf-Range\u003c/code\u003e contains a weak ETag \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3567\"\u003e#3567\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eInclude \u003ccode\u003eAllow: GET, HEAD\u003c/code\u003e in \u003ccode\u003eStaticFiles\u003c/code\u003e \u003ccode\u003e405\u003c/code\u003e responses \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3640\"\u003e#3640\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eClose \u003ccode\u003eRequest.stream()\u003c/code\u003e generators deterministically, avoiding \u0026quot;Exception ignored\u0026quot; errors with stacked \u003ccode\u003eBaseHTTPMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3628\"\u003e#3628\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eVary: Cookie\u003c/code\u003e when \u003ccode\u003eSession.pop()\u003c/code\u003e removes an existing key \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3186\"\u003e#3186\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eEmit \u003ccode\u003eMax-Age=0\u003c/code\u003e on the session cookie when \u003ccode\u003eSessionMiddleware\u003c/code\u003e uses \u003ccode\u003emax_age=0\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3651\"\u003e#3651\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBracket IPv6 hostnames in \u003ccode\u003eURL.replace()\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3617\"\u003e#3617\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/starlette/commit/7b2948fe7b7fff28bb018607d54cd4dfa518910e\"\u003e\u003ccode\u003e7b2948f\u003c/code\u003e\u003c/a\u003e Version 1.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/5b544ced7345d8b2315419ecaded4b52bffe6b76\"\u003e\u003ccode\u003e5b544ce\u003c/code\u003e\u003c/a\u003e Send response start immediately when GZipMiddleware cannot compress (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3631\"\u003e#3631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/96d5023c55b29224edb8d684868c49f681d079a9\"\u003e\u003ccode\u003e96d5023\u003c/code\u003e\u003c/a\u003e Emit \u003ccode\u003eMax-Age=0\u003c/code\u003e on session cookie when \u003ccode\u003emax_age=0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3651\"\u003e#3651\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/0a15da395d13e8eb6ecadeb6f4928d7d7c493fc8\"\u003e\u003ccode\u003e0a15da3\u003c/code\u003e\u003c/a\u003e Include allowed methods in StaticFiles 405 responses (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3640\"\u003e#3640\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/ff5b4df55ac4ac625582ecc446c850200c91ae64\"\u003e\u003ccode\u003eff5b4df\u003c/code\u003e\u003c/a\u003e Close \u003ccode\u003eRequest.stream()\u003c/code\u003e generators with \u003ccode\u003eaclosing\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3628\"\u003e#3628\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/7cb2f09c1858ea1400afbd355a900ce14d720533\"\u003e\u003ccode\u003e7cb2f09\u003c/code\u003e\u003c/a\u003e Mark sessions as accessed when popping existing keys (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3186\"\u003e#3186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/c67ca4eeef171c679074f4ebc579ee5dbd657aa8\"\u003e\u003ccode\u003ec67ca4e\u003c/code\u003e\u003c/a\u003e Add HTTP 103 Early Hints support (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3435\"\u003e#3435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/04741d073fb6c3ab5fccad08be8ae7aad1f67e91\"\u003e\u003ccode\u003e04741d0\u003c/code\u003e\u003c/a\u003e Update broken external documentation links (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3621\"\u003e#3621\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/470f986deb9cc3f4475ba0b49ae9f80c380d9fce\"\u003e\u003ccode\u003e470f986\u003c/code\u003e\u003c/a\u003e Correct the documented WebSocket and Request constructor signatures (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/b2e8750b4aaa183553d32a61cf553bef8d406465\"\u003e\u003ccode\u003eb2e8750\u003c/code\u003e\u003c/a\u003e Bracket IPv6 hostnames in \u003ccode\u003eURL.replace()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3617\"\u003e#3617\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/starlette/compare/1.7.0...1.8.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `wrapt` from 2.5.0 to 2.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/GrahamDumpleton/wrapt/releases\"\u003ewrapt's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ewrapt 2.5.1\u003c/h2\u003e\n\u003cp\u003eFull release notes: \u003ca href=\"https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1\"\u003ehttps://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eInstall from PyPi (recommended):\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epip install wrapt==2.5.1\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003ePyPi uploads follow each GitHub release; if \u003ccode\u003epip\u003c/code\u003e reports the\nversion is unavailable, the matching PyPi upload may not have\nhappened yet.\u003c/p\u003e\n\u003cp\u003ePre-built wheels are provided for a range of Python versions\nand platforms (Linux x86_64/aarch64/riscv64, macOS x86_64 and\narm64, Windows x86_64 and arm64, plus PyPy and free-threaded\nbuilds). The source distribution is also attached together\nwith \u003ccode\u003eSHA256SUMS\u003c/code\u003e for verification.\u003c/p\u003e\n\u003ch2\u003ewrapt 2.5.1rc1\u003c/h2\u003e\n\u003cp\u003eRelease candidate. Release notes for the upcoming\n2.5.1 final (work in progress): \u003ca href=\"https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1\"\u003ehttps://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eMay be installable from PyPi:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epip install wrapt==2.5.1rc1\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eIf \u003ccode\u003epip\u003c/code\u003e reports the version is unavailable, this candidate\neither has not been uploaded yet or is not being published to\nPyPi. Use the attached wheels or build from the source\ndistribution instead:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003etar xf wrapt-2.5.1rc1.tar.gz\ncd wrapt-2.5.1rc1\npip install .\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003eSHA256SUMS\u003c/code\u003e is attached for verification of the archives.\u003c/p\u003e\n\u003ch2\u003ewrapt 2.5.1.dev1\u003c/h2\u003e\n\u003cp\u003eDevelopment snapshot. Not normally published to PyPi\n(occasionally uploaded to exercise the release pipeline).\u003c/p\u003e\n\u003cp\u003eRelease notes for the upcoming 2.5.1 final (work in\nprogress): \u003ca href=\"https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1\"\u003ehttps://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ePlatform wheels and the source distribution are attached. To\ntest against your Python install, either grab a matching wheel\nor build from the source distribution:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epip install wrapt-2.5.1.dev1-\u0026lt;python\u0026gt;-\u0026lt;abi\u0026gt;-\u0026lt;platform\u0026gt;.whl\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eor\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/GrahamDumpleton/wrapt/blob/develop/docs/changes.rst\"\u003ewrapt's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.5.1\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugs Fixed\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eA \u003ccode\u003eLazyObjectProxy\u003c/code\u003e created with an \u003ccode\u003einterface\u003c/code\u003e argument that\ndeclared a path-like type, such as \u003ccode\u003eos.PathLike\u003c/code\u003e or \u003ccode\u003epathlib.Path\u003c/code\u003e,\ndid not define the \u003ccode\u003e__fspath__()\u003c/code\u003e special method on the class it\ngenerated. Because \u003ccode\u003eos.fspath()\u003c/code\u003e looks up \u003ccode\u003e__fspath__()\u003c/code\u003e on the type\nof the object, passing such a proxy to \u003ccode\u003eos.fspath()\u003c/code\u003e, the builtin\n\u003ccode\u003eopen()\u003c/code\u003e or other standard library functions accepting paths raised\n\u003ccode\u003eTypeError\u003c/code\u003e before the factory callable had been invoked to create the\nwrapped object. The \u003ccode\u003e__fspath__()\u003c/code\u003e special method is now added when the\ndeclared interface provides it, in the same way as is already done for\nthe other special methods looked up on the type, so the first path\nconversion triggers creation of the wrapped object and succeeds. With\nthanks to Muneeb Sheikh for \u003ccode\u003epull request [#360](https://github.com/GrahamDumpleton/wrapt/issues/360) \u0026lt;https://github.com/GrahamDumpleton/wrapt/pull/360\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA callback passed to \u003ccode\u003ewrapt.WeakFunctionProxy\u003c/code\u003e which was callable but\nevaluated as false, such as an event emitter object which reports its\nnumber of subscribers via \u003ccode\u003e__len__()\u003c/code\u003e and is empty when first created,\nwas passed the underlying weak reference object instead of the proxy\nwhen the wrapped function expired. Where the wrapped function was a\nbound method, such a callback could also be called twice, once each\nwhen the instance and the function expired. Only \u003ccode\u003eNone\u003c/code\u003e is now treated\nas meaning no callback was supplied, which mirrors the behaviour of\n\u003ccode\u003eweakref.ref()\u003c/code\u003e and \u003ccode\u003eweakref.proxy()\u003c/code\u003e in the standard library, so\nthese callbacks now receive the proxy and are called only once, as for\nany other callback. With thanks to Huanyi Xie for \u003ccode\u003epull request [#359](https://github.com/GrahamDumpleton/wrapt/issues/359) \u0026lt;https://github.com/GrahamDumpleton/wrapt/pull/359\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA \u003ccode\u003ewrapt.AdapterFactory\u003c/code\u003e instance passed as the \u003ccode\u003eadapter\u003c/code\u003e argument\nto \u003ccode\u003ewrapt.decorator\u003c/code\u003e was ignored, and so never called, if the instance\nevaluated as false, such as when the factory class defined \u003ccode\u003e__bool__()\u003c/code\u003e\nor \u003ccode\u003e__len__()\u003c/code\u003e. The decorated function then retained its original\nsignature instead of that produced by the factory. Whether an adapter\nfactory was supplied is now determined by type before the truth value\nof the adapter is considered, so such factories are always called. As a\nconsequence of this change a factory can now also return \u003ccode\u003eNone\u003c/code\u003e, or\nany other false value, to indicate that no adapter should be used for a\nparticular function, where previously this failed with an obscure error.\nWith thanks to Luochenchen for \u003ccode\u003epull request [#358](https://github.com/GrahamDumpleton/wrapt/issues/358) \u0026lt;https://github.com/GrahamDumpleton/wrapt/pull/358\u0026gt;\u003c/code\u003e_ which identified\nthe issue.\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/GrahamDumpleton/wrapt/commit/dbbb21fa76915541a850a2029e97c116f38a53b0\"\u003e\u003ccode\u003edbbb21f\u003c/code\u003e\u003c/a\u003e Merge branch 'release/2.5.1'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/95e2afbb47cadfdff5e19ec88ba7caf718bd4a45\"\u003e\u003ccode\u003e95e2afb\u003c/code\u003e\u003c/a\u003e Drop the release candidate suffix for the 2.5.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/1ed68ca8c32b15c59dea50032b08bc3271529ec3\"\u003e\u003ccode\u003e1ed68ca\u003c/code\u003e\u003c/a\u003e Update to 2.5.1rc1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/77e826dd8973c960f0733977ec67f43896a4d050\"\u003e\u003ccode\u003e77e826d\u003c/code\u003e\u003c/a\u003e Recognise adapter factories by type so one which evaluates as false is not ig...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/13efe635b6942394977b016cfd2d8ac6530a8124\"\u003e\u003ccode\u003e13efe63\u003c/code\u003e\u003c/a\u003e Move change note for PR \u003ca href=\"https://redirect.github.com/GrahamDumpleton/wrapt/issues/359\"\u003e#359\u003c/a\u003e under 2.5.1 and add clarifying comments.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/6ba6048628e7a1c584bd767b451037dc36dd6b03\"\u003e\u003ccode\u003e6ba6048\u003c/code\u003e\u003c/a\u003e Reorder \u003cstrong\u003efspath\u003c/strong\u003e handling in lazy proxy and add change note for PR \u003ca href=\"https://redirect.github.com/GrahamDumpleton/wrapt/issues/360\"\u003e#360\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/5e97e2d1a3c2effc9f1f8357f83802e6cbce8998\"\u003e\u003ccode\u003e5e97e2d\u003c/code\u003e\u003c/a\u003e Update to 2.5.1.dev1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/e9d491c7c8b31747e9dc280f48783d69d9ac2904\"\u003e\u003ccode\u003ee9d491c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/GrahamDumpleton/wrapt/issues/359\"\u003e#359\u003c/a\u003e from xiehuanyi/fix-falsey-weak-proxy-callbacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/0d6c935bac4fe9c4b3ca2a0f696950024b8b07bc\"\u003e\u003ccode\u003e0d6c935\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/GrahamDumpleton/wrapt/issues/360\"\u003e#360\u003c/a\u003e from muneikh/fix-lazy-pathlike-interface\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GrahamDumpleton/wrapt/commit/de574aa4fd5ca3c272e533dfd250a4868bfacbb3\"\u003e\u003ccode\u003ede574aa\u003c/code\u003e\u003c/a\u003e Honor the declared pathlike interface in lazy proxies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/GrahamDumpleton/wrapt/compare/2.5.0...2.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `aiohttp` from 3.14.4 to 3.14.5\nUpdates `hypothesis` from 6.168.5 to 6.170.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7572cd07bbb9d845c40f71c95ba3853fb7467403\"\u003e\u003ccode\u003e7572cd0\u003c/code\u003e\u003c/a\u003e Bump hypothesis version to 6.170.0 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/1ad039f4ead3a91721bb8adde8da6c46979d549c\"\u003e\u003ccode\u003e1ad039f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4871\"\u003e#4871\u003c/a\u003e from Zac-HD/claude/hypothesi...\n\n_Description has been truncated_","html_url":"https://github.com/Burbanit0/Vote-App/pull/990","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Burbanit0%2FVote-App/issues/990","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/990/packages"}},{"old_version":"2.12.3","new_version":"2.14.1","update_type":"minor","path":"/backend","pr_created_at":"2026-10-23T05:25:42.000Z","version_change":"2.12.3 → 2.14.1","issue":{"uuid":"5992427616","node_id":"PR_kwDOVUVoh88AAAABKLo7CQ","number":8,"state":"open","title":"Bump pydantic from 2.12.3 to 2.14.1 in /backend","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-10-23T05:25:42.000Z","updated_at":"2026-10-23T05:25:45.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"pydantic","old_version":"2.12.3","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.12.3 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.3...v2.14.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=pydantic\u0026package-manager=pip\u0026previous-version=2.12.3\u0026new-version=2.14.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","html_url":"https://github.com/xiyuxu02/Ai-Agent-main/pull/8","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiyuxu02%2FAi-Agent-main/issues/8","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/8/packages"}},{"old_version":"2.12.5","new_version":"2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-21T22:20:19.000Z","version_change":"2.12.5 → 2.14.1","issue":{"uuid":"5969462368","node_id":"PR_kwDOVSsfVM8AAAABJ5ZsxQ","number":4,"state":"closed","title":"Bump the python-dependencies group with 8 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-10-24T19:57:50.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-21T22:20:19.000Z","updated_at":"2026-10-24T19:57:54.000Z","time_to_close":250651,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python-dependencies","update_count":8,"packages":[{"name":"pydantic","old_version":"2.12.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"numpy","old_version":"2.4.2","new_version":"2.5.4","repository_url":"https://github.com/numpy/numpy"},{"name":"shapely","old_version":"2.1.2","new_version":"2.2.0","repository_url":"https://github.com/shapely/shapely"},{"name":"pytest-cov","old_version":"7.0.0","new_version":"7.1.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"ruff","old_version":"0.15.0","new_version":"0.17.1","repository_url":"https://github.com/astral-sh/ruff"},{"name":"bandit","old_version":"1.9.3","new_version":"1.9.4","repository_url":"https://github.com/PyCQA/bandit"},{"name":"pip-audit","old_version":"2.10.0","new_version":"2.10.1","repository_url":"https://github.com/pypa/pip-audit"},{"name":"pre-commit","old_version":"4.5.1","new_version":"4.7.0","repository_url":"https://github.com/pre-commit/pre-commit"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-dependencies group with 8 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.14.1` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.2` | `2.5.4` |\n| [shapely](https://github.com/shapely/shapely) | `2.1.2` | `2.2.0` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `7.0.0` | `7.1.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.0` | `0.17.1` |\n| [bandit](https://github.com/PyCQA/bandit) | `1.9.3` | `1.9.4` |\n| [pip-audit](https://github.com/pypa/pip-audit) | `2.10.0` | `2.10.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.5.1` | `4.7.0` |\n\nUpdates `pydantic` from 2.12.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.5...v2.14.1\"\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.2 to 2.5.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/releases\"\u003enumpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.5.4 (Oct 10,  2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.5.4 Release Notes\u003c/h1\u003e\n\u003cp\u003e\u003cem\u003eReleased on 2026-10-10.\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eNumPy 2.5.4 is a patch release that fixes bugs discovered after the 2.5.3\nrelease. Highlights are:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMany typing fixes and improvements,\u003c/li\u003e\n\u003cli\u003eA workaround for the MSVC 19.51 bug, see below.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThis release supports Python versions 3.12-3.15.\u003c/p\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003enumpy.linalg.svd\u003c/code\u003e and \u003ccode\u003enumpy.linalg.lstsq\u003c/code\u003e now raise for inputs containing\ninfinities instead of returning garbage results.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed hangs in \u003ccode\u003enumpy.linalg.svd\u003c/code\u003e and \u003ccode\u003enumpy.linalg.lstsq\u003c/code\u003e for certain inputs\ncontaining infinities for recent versions of some LAPACK implementations.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003enumpy.linalg.cond\u003c/code\u003e now handles non-finite inputs more consistently.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32593\"\u003egh-32593\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eStringDType hashing with NaN sentinels\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eStringDType\u003c/code\u003e instances with equivalent floating-point NaN sentinels now\nhave equal hashes. Previously, distinct NaN objects could produce equal\ndtype instances with different hashes, causing dictionary lookups and set\ndeduplication to fail.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32563\"\u003egh-32563\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003ch3\u003e\u003ccode\u003eMaskedArray\u003c/code\u003e resets a fill_value that cannot be represented in a new dtype\u003c/h3\u003e\n\u003cp\u003eA fill_value copied from a source array is now reset to the default fill_value\nfor the new dtype when it cannot be represented in that dtype. Previously the\ncopied value could be stale: ufuncs that change dtype left the result holding a\nfill_value typed for the old dtype, which raised a \u003ccode\u003eTypeError\u003c/code\u003e only when\nsomething later validated it (such as \u003ccode\u003e.view()\u003c/code\u003e), and a floating point\nfill_value that overflows an integer dtype was kept as an out-of-range value\ntogether with a \u003ccode\u003eRuntimeWarning\u003c/code\u003e. Both now fall back to the default,\nincluding when a masked array is passed to \u003ccode\u003eMaskedArray\u003c/code\u003e with a different\n\u003ccode\u003edtype\u003c/code\u003e. A fill_value given explicitly by the user is still validated and\nraises as before. This can now raise a \u003ccode\u003eComplexWarning\u003c/code\u003e if the fill_value is\ncomplex and the new dtype is real.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/a3d0ef1df045b858e68115001fdabc930bb3b68c\"\u003e\u003ccode\u003ea3d0ef1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32969\"\u003e#32969\u003c/a\u003e from charris/prepare-2.5.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/087b5367c84b5296c32c26c415438d87d3888586\"\u003e\u003ccode\u003e087b536\u003c/code\u003e\u003c/a\u003e MAINT: Make OpenBLAS version check use 2.5.x branch.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/91acd879242a679604579895d490c26f864a4b03\"\u003e\u003ccode\u003e91acd87\u003c/code\u003e\u003c/a\u003e REL: Prepare for the NumPy 2.5.4 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/9cc555bae07244551829c3a4eb7a635bef6345b3\"\u003e\u003ccode\u003e9cc555b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32956\"\u003e#32956\u003c/a\u003e from charris/backport-typing-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/e04b972a306136b8ac9219be199948badafa3475\"\u003e\u003ccode\u003ee04b972\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003edtype[void].names\u003c/code\u003e: allow setting with list (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32943\"\u003e#32943\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/d9299693d20c3fd1aa83b9464d074632cf59aaac\"\u003e\u003ccode\u003ed929969\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003etimedelta64\u003c/code\u003e: \u003ccode\u003edatetime.timedelta\u003c/code\u003e construction isn't deprecated (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/839467fdbcc1d68b68f4fe2a61d3387107c78394\"\u003e\u003ccode\u003e839467f\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003ema.getmaskarray\u003c/code\u003e: accept array-likes (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32934\"\u003e#32934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/64b721b23f51543ed9316a5fd21a48734760b429\"\u003e\u003ccode\u003e64b721b\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003epolynomial\u003c/code\u003e: accept scalar \u003ccode\u003ecoef\u003c/code\u003e in the poly constructors (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32931\"\u003e#32931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/06b7ad226e41b71919b2d35c50063998eced0b9d\"\u003e\u003ccode\u003e06b7ad2\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003evoid\u003c/code\u003e: accept any \u003ccode\u003edtype: str\u003c/code\u003e in constructor calls (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32928\"\u003e#32928\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/c7bcd2c0aaca732b87575829cc61508076de1af5\"\u003e\u003ccode\u003ec7bcd2c\u003c/code\u003e\u003c/a\u003e TYP: \u003ccode\u003eplace\u003c/code\u003e: widen \u003ccode\u003emask\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32926\"\u003e#32926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/numpy/numpy/compare/v2.4.2...v2.5.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `shapely` from 2.1.2 to 2.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/shapely/shapely/releases\"\u003eshapely's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.2.0\u003c/h2\u003e\n\u003cp\u003eShapely 2.2.0 is a feature release with various new functions, improvements and bug fixes. Highlights include performance improvements for scalar attribute and method calls, and the new \u003ccode\u003eminimum_width\u003c/code\u003e, \u003ccode\u003ecoverage_clean\u003c/code\u003e, \u003ccode\u003esplit\u003c/code\u003e, \u003ccode\u003etransform_coordseq\u003c/code\u003e, and \u003ccode\u003eget_segments\u003c/code\u003e top-level functions.\u003c/p\u003e\n\u003cp\u003eShapely 2.2 supports Python \u0026gt;= 3.11, and binary wheels on PyPI include GEOS 3.14 and are now also provided for the Windows ARM64 platform.\nWheels are available for Python 3.15.\u003c/p\u003e\n\u003cp\u003eFor a full changelog, see \u003ca href=\"https://shapely.readthedocs.io/en/stable/release/2.x.html#version-2-2-0\"\u003ehttps://shapely.readthedocs.io/en/stable/release/2.x.html#version-2-2-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e2.2.0rc1\u003c/h2\u003e\n\u003cp\u003eShapely 2.2.0 is a feature release with various new functions, improvements and bug fixes. This is a first release candidate.\u003c/p\u003e\n\u003cp\u003eFor a full changelog, see \u003ca href=\"https://shapely.readthedocs.io/en/latest/release/2.x.html#version-2-2-0\"\u003ehttps://shapely.readthedocs.io/en/latest/release/2.x.html#version-2-2-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/shapely/shapely/blob/main/CHANGES.txt\"\u003eshapely's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.2.0 (2026-10-07)\u003c/h2\u003e\n\u003cp\u003eShapely 2.2.0 is a feature release with various new functions,\nimprovements and bug fixes. Highlights include performance improvements for\nscalar attribute and method calls, and the new \u003ccode\u003eminimum_width\u003c/code\u003e,\n\u003ccode\u003ecoverage_clean\u003c/code\u003e, \u003ccode\u003esplit\u003c/code\u003e, \u003ccode\u003etransform_coordseq\u003c/code\u003e, and \u003ccode\u003eget_segments\u003c/code\u003e\ntop-level functions.\u003c/p\u003e\n\u003cp\u003eShapely 2.2 supports Python \u0026gt;= 3.11, and binary wheels on PyPI include GEOS 3.14\nand are now also provided for the Windows ARM64 platform.\nWheels are available for Python 3.15.\u003c/p\u003e\n\u003cp\u003eFor a full changelog, see\n\u003ca href=\"https://shapely.readthedocs.io/en/latest/release/2.x.html#version-2-2-0\"\u003ehttps://shapely.readthedocs.io/en/latest/release/2.x.html#version-2-2-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/shapely/shapely/commit/229c71f7128713b37201f3c77336d32b52467454\"\u003e\u003ccode\u003e229c71f\u003c/code\u003e\u003c/a\u003e RLS: 2.2.0 (\u003ca href=\"https://redirect.github.com/shapely/shapely/issues/2526\"\u003e#2526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/702d8fdf786374407f2aab2289086deff91e62ca\"\u003e\u003ccode\u003e702d8fd\u003c/code\u003e\u003c/a\u003e CLN: avoid warnings about discarding const qualifier (\u003ca href=\"https://redirect.github.com/shapely/shapely/issues/2525\"\u003e#2525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/0e92040f2308b8b83f88843cbba35564d1dc1ee0\"\u003e\u003ccode\u003e0e92040\u003c/code\u003e\u003c/a\u003e DOC: update tranform section in the manual (\u003ca href=\"https://redirect.github.com/shapely/shapely/issues/2518\"\u003e#2518\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/677f305290d35eaeb6bb6a6bfecab8b259e38388\"\u003e\u003ccode\u003e677f305\u003c/code\u003e\u003c/a\u003e MAINT: avoid meson-python 0.22 + DOC: recommend install c-compiler in conda d...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/68ff25b2c850389102c662526506f468a01a13e1\"\u003e\u003ccode\u003e68ff25b\u003c/code\u003e\u003c/a\u003e Use DeprecationWarning instead of FutureWarning for shapely.ops.transform() d...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/2590a0c8b4bb63ed5a1acc25ed691e6ce707f6aa\"\u003e\u003ccode\u003e2590a0c\u003c/code\u003e\u003c/a\u003e BUG: fix empty / non-array cases for transform (\u003ca href=\"https://redirect.github.com/shapely/shapely/issues/2523\"\u003e#2523\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/95008b2d75581319eb609137553d07b40268de85\"\u003e\u003ccode\u003e95008b2\u003c/code\u003e\u003c/a\u003e ENH: support array input for transform_coordseq (consistent with transform) (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/e2fe07b0f249c6face34fe544426b46960548221\"\u003e\u003ccode\u003ee2fe07b\u003c/code\u003e\u003c/a\u003e docs: Move changelog entry to docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/c847bb7a1312d72044dd7a4fd2af606b363547c8\"\u003e\u003ccode\u003ec847bb7\u003c/code\u003e\u003c/a\u003e fix: Forward **kwargs in line_interpolate_point and line_locate_point (\u003ca href=\"https://redirect.github.com/shapely/shapely/issues/2480\"\u003e#2480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shapely/shapely/commit/30c0a51039d4b4b0b3b74ba117039e2c5849906b\"\u003e\u003ccode\u003e30c0a51\u003c/code\u003e\u003c/a\u003e MAINT: move versioneer config to pyproject.toml; remove setup.cfg (\u003ca href=\"https://redirect.github.com/shapely/shapely/issues/2511\"\u003e#2511\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/shapely/shapely/compare/2.1.2...2.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 7.0.0 to 7.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.0 (2026-03-21)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed total coverage computation to always be consistent, regardless of reporting settings.\nPreviously some reports could produce different total counts, and consequently can make --cov-fail-under behave different depending on\nreporting options.\nSee \u003ccode\u003e[#641](https://github.com/pytest-dev/pytest-cov/issues/641) \u0026lt;https://github.com/pytest-dev/pytest-cov/issues/641\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImprove handling of ResourceWarning from sqlite3.\u003c/p\u003e\n\u003cp\u003eThe plugin adds warning filter for sqlite3 \u003ccode\u003eResourceWarning\u003c/code\u003e unclosed database (since 6.2.0).\nIt checks if there is already existing plugin for this message by comparing filter regular expression.\nWhen filter is specified on command line the message is escaped and does not match an expected message.\nA check for an escaped regular expression is added to handle this case.\u003c/p\u003e\n\u003cp\u003eWith this fix one can suppress \u003ccode\u003eResourceWarning\u003c/code\u003e from sqlite3 from command line::\u003c/p\u003e\n\u003cp\u003epytest -W \u0026quot;ignore:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\u0026quot; ...\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eVarious improvements to documentation.\nContributed by Art Pelling in \u003ccode\u003e[#718](https://github.com/pytest-dev/pytest-cov/issues/718) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/718\u0026gt;\u003c/code\u003e_ and\n\u0026quot;vivodi\u0026quot; in \u003ccode\u003e[#738](https://github.com/pytest-dev/pytest-cov/issues/738) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/738\u0026gt;\u003c/code\u003e\u003cem\u003e.\nAlso closed \u003ccode\u003e[#736](https://github.com/pytest-dev/pytest-cov/issues/736) \u0026lt;https://github.com/pytest-dev/pytest-cov/issues/736\u0026gt;\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed some assertions in tests.\nContributed by in Markéta Machová in \u003ccode\u003e[#722](https://github.com/pytest-dev/pytest-cov/issues/722) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/722\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved unnecessary coverage configuration copying (meant as a backup because reporting commands had configuration side-effects before coverage 5.0).\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/pytest-dev/pytest-cov/commit/66c8a526b1246b5eb8fb1bc218878131bc628622\"\u003e\u003ccode\u003e66c8a52\u003c/code\u003e\u003c/a\u003e Bump version: 7.0.0 → 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f7076624784332594aa4cb3585d4757d295db15e\"\u003e\u003ccode\u003ef707662\u003c/code\u003e\u003c/a\u003e Make the examples use pypy 3.11.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/6049a7847872e3139e6c82e93787123df5dc8672\"\u003e\u003ccode\u003e6049a78\u003c/code\u003e\u003c/a\u003e Make context test use the old ctracer (seems the new sysmon tracer behaves di...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/8ebf20bbbc73478b3f8fd36d30237d9ea083f06b\"\u003e\u003ccode\u003e8ebf20b\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/861d30e60d571f97259c6b718b71c819d5dbc3b9\"\u003e\u003ccode\u003e861d30e\u003c/code\u003e\u003c/a\u003e Remove the backup context manager  - shouldn't be needed since coverage 5.0, ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/fd4c956014035527f0c3c8d7faef3f8cfdadac7f\"\u003e\u003ccode\u003efd4c956\u003c/code\u003e\u003c/a\u003e Pass the precision on the nulled total (seems that there's some caching goion...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/78c9c4ecb005faf4962fd86ff7bf9c9cce9554d6\"\u003e\u003ccode\u003e78c9c4e\u003c/code\u003e\u003c/a\u003e Only run the 3.9 on older deps.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/4849a922e8be725c662a3d9175da571ace6545dc\"\u003e\u003ccode\u003e4849a92\u003c/code\u003e\u003c/a\u003e Punctuation.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/197c35e2f37031fd1927715307ab6eed7cb3d2b7\"\u003e\u003ccode\u003e197c35e\u003c/code\u003e\u003c/a\u003e Update changelog and hopefully I don't forget to publish release again :))\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/14dc1c92d44108384e39803888635fdbfc578b7f\"\u003e\u003ccode\u003e14dc1c9\u003c/code\u003e\u003c/a\u003e Update examples to use 3.11 and make the adhoc layout example look a bit more...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v7.0.0...v7.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.0 to 0.17.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.17.1\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.17.1\u003c/h2\u003e\n\u003cp\u003e|  File  | Platform | Checksum |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.17.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-15.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Don't treat \u003ccode\u003eNone\u003c/code\u003e, \u003ccode\u003eTrue\u003c/code\u003e, or \u003ccode\u003eFalse\u003c/code\u003e as keywords (\u003ccode\u003eE271\u003c/code\u003e-\u003ccode\u003eE274\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29322\"\u003e#29322\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Detect legacy positional-only parameters in \u003ccode\u003e__new__\u003c/code\u003e methods (\u003ccode\u003ePYI063\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28502\"\u003e#28502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positives on quoted annotations (\u003ccode\u003ePYI036\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29274\"\u003e#29274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29366\"\u003e#29366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat more \u003ccode\u003ecollections\u003c/code\u003e and \u003ccode\u003eweakref\u003c/code\u003e containers as mutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29213\"\u003e#29213\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-import-conventions\u003c/code\u003e] Update default and example \u003ccode\u003ealiases\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/29333\"\u003e#29333\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fixfon\"\u003e\u003ccode\u003e@​fixfon\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mmaxjr\"\u003e\u003ccode\u003e@​mmaxjr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshuavetos\"\u003e\u003ccode\u003e@​joshuavetos\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nekomario28\"\u003e\u003ccode\u003e@​nekomario28\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shan3520\"\u003e\u003ccode\u003e@​shan3520\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.17.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-10-09.\u003c/p\u003e\n\u003cp\u003eThe executables in our macOS and Windows release archives and \u003ccode\u003eruff\u003c/code\u003e wheels are now code-signed.\nmacOS executables are signed with an Apple Developer ID certificate and notarized by Apple. Windows\nexecutables have timestamped Authenticode signatures from Azure Artifact Signing. This enables\nverification of the release publisher and binary integrity, supports publisher-based allowlisting,\nand should reduce security warnings and antivirus false positives.\u003c/p\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate the default and latest Python versions for 3.15 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28792\"\u003e#28792\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eRuff now defaults to Python 3.11 instead of 3.10 when no Python version is configured through\n\u003ca href=\"https://docs.astral.sh/ruff/settings/#target-version\"\u003e\u003ccode\u003etarget-version\u003c/code\u003e\u003c/a\u003e or\n\u003ca href=\"https://docs.astral.sh/ruff/configuration/#inferring-the-python-version\"\u003e\u003ccode\u003erequires-python\u003c/code\u003e\u003c/a\u003e. When\nchecking for syntax errors without a configured Python version, Ruff now defaults to Python 3.15\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/astral-sh/ruff/commit/4683270c69cbdaf6ad64d3f983fc458d5a43b41f\"\u003e\u003ccode\u003e4683270\u003c/code\u003e\u003c/a\u003e Bump version to 0.17.1 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29420\"\u003e#29420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3514027edb659bbc3c787d355be9d130e5587f15\"\u003e\u003ccode\u003e3514027\u003c/code\u003e\u003c/a\u003e [ty] Update typing conformance suite pin (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29417\"\u003e#29417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/829455624d78f2e89669e4b4b14af2b96abdb1ae\"\u003e\u003ccode\u003e8294556\u003c/code\u003e\u003c/a\u003e Update referenced PR security-review workflow (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29237\"\u003e#29237\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d1e1b1f69b511df4385f64b510eeec4da01c1a0e\"\u003e\u003ccode\u003ed1e1b1f\u003c/code\u003e\u003c/a\u003e [ty] Preserve recursive aliases when rebuilding intersections (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29057\"\u003e#29057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/93526150df078af7dd8fc4226cdcc469539d2001\"\u003e\u003ccode\u003e9352615\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eperflint\u003c/code\u003e] Avoid invalid comprehension suggestions (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/83a3afc3156d73ae4296f3fa74ede28e4c72bfcd\"\u003e\u003ccode\u003e83a3afc\u003c/code\u003e\u003c/a\u003e Fix dedent with multiple leading comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29382\"\u003e#29382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/b42a8734410230f4529151782cae951b99bed858\"\u003e\u003ccode\u003eb42a873\u003c/code\u003e\u003c/a\u003e [ty] Clarify object attribute write-contract rationale (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29384\"\u003e#29384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d01678ebf594c97a7767d4372061c1f80ae5b5bb\"\u003e\u003ccode\u003ed01678e\u003c/code\u003e\u003c/a\u003e [ty] Clarify object attribute write-contract rationale (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29384\"\u003e#29384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/355b42a7719d8a555e3ee50c89848b42d8a11eb5\"\u003e\u003ccode\u003e355b42a\u003c/code\u003e\u003c/a\u003e [ty] Avoid writable override contracts from object (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/29373\"\u003e#29373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e26e6d2a54ac2c5e1f5b1945042de3ff3885bf8e\"\u003e\u003ccode\u003ee26e6d2\u003c/code\u003e\u003c/a\u003e [ty] Collect intersection inference through constraint relations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28677\"\u003e#28677\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.0...0.17.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `bandit` from 1.9.3 to 1.9.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/PyCQA/bandit/releases\"\u003ebandit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.9.4\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore: fixed some typos in comments by \u003ca href=\"https://github.com/jakob1379\"\u003e\u003ccode\u003e@​jakob1379\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1351\"\u003ePyCQA/bandit#1351\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump docker/login-action from 3.6.0 to 3.7.0 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1353\"\u003ePyCQA/bandit#1353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump docker/build-push-action from 6.18.0 to 6.19.2 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1357\"\u003ePyCQA/bandit#1357\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix B613 crash when reading from stdin by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1361\"\u003ePyCQA/bandit#1361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInclude filename in nosec 'no failed test' warning by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1363\"\u003ePyCQA/bandit#1363\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix B615 false positive when revision is set via variable by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1358\"\u003ePyCQA/bandit#1358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLower version guard in check_ast_node to Python 3.12 by \u003ca href=\"https://github.com/rcgray\"\u003e\u003ccode\u003e@​rcgray\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1355\"\u003ePyCQA/bandit#1355\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix B106 reporting wrong line number on multiline function calls by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1360\"\u003ePyCQA/bandit#1360\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jakob1379\"\u003e\u003ccode\u003e@​jakob1379\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1351\"\u003ePyCQA/bandit#1351\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1361\"\u003ePyCQA/bandit#1361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rcgray\"\u003e\u003ccode\u003e@​rcgray\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1355\"\u003ePyCQA/bandit#1355\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PyCQA/bandit/compare/1.9.3...1.9.4\"\u003ehttps://github.com/PyCQA/bandit/compare/1.9.3...1.9.4\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/92ae8b82fb422a639f0ed8d99e96cea769594e08\"\u003e\u003ccode\u003e92ae8b8\u003c/code\u003e\u003c/a\u003e Fix B106 reporting wrong line number on multiline function calls (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1360\"\u003e#1360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/c8c8a55c3307333b8eb46cb2ef46d49b1fad6546\"\u003e\u003ccode\u003ec8c8a55\u003c/code\u003e\u003c/a\u003e Lower version guard in check_ast_node to Python 3.12 (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1355\"\u003e#1355\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/8f2f9284fca830ca017b2e2cc3ddc2a7b74b7040\"\u003e\u003ccode\u003e8f2f928\u003c/code\u003e\u003c/a\u003e Fix B615 false positive when revision is set via variable (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1358\"\u003e#1358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/e27493f71c114e0e5dfc0a475d225d7f9f4a7e2b\"\u003e\u003ccode\u003ee27493f\u003c/code\u003e\u003c/a\u003e Include filename in nosec 'no failed test' warning (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1363\"\u003e#1363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/b69b336450301d424e5ba04c9a58e8d41b7169b6\"\u003e\u003ccode\u003eb69b336\u003c/code\u003e\u003c/a\u003e Fix B613 crash when reading from stdin (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1361\"\u003e#1361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/e418b798abcc3f2b00c07fd6315da8fe9aeead00\"\u003e\u003ccode\u003ee418b79\u003c/code\u003e\u003c/a\u003e Bump docker/build-push-action from 6.18.0 to 6.19.2 (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1357\"\u003e#1357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/ff646fd7e0e34fb350196fc58448fad17178c27a\"\u003e\u003ccode\u003eff646fd\u003c/code\u003e\u003c/a\u003e Bump docker/login-action from 3.6.0 to 3.7.0 (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1353\"\u003e#1353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/c0def6c7ebab60f98c28ba759d488f4fbe6dae89\"\u003e\u003ccode\u003ec0def6c\u003c/code\u003e\u003c/a\u003e chore: fixed some typos in comments (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1351\"\u003e#1351\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/PyCQA/bandit/compare/1.9.3...1.9.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pip-audit` from 2.10.0 to 2.10.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/pip-audit/releases\"\u003epip-audit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.10.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a \u003ccode\u003eKeyError\u003c/code\u003e crash when an OSV vulnerability record contains an\n\u003ccode\u003eaffected\u003c/code\u003e entry that omits the optional \u003ccode\u003eranges\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/pip-audit/blob/main/CHANGELOG.md\"\u003epip-audit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[2.10.1]\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a \u003ccode\u003eKeyError\u003c/code\u003e crash when an OSV vulnerability record contains an\n\u003ccode\u003eaffected\u003c/code\u003e entry that omits the optional \u003ccode\u003eranges\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/8894eb8cee033531a1fbd9f2fb160892531c14e3\"\u003e\u003ccode\u003e8894eb8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1056\"\u003e#1056\u003c/a\u003e from pypa/copilot/release-2101\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/1c625b7f4fd5790e6a05723b2ad9e670629a061d\"\u003e\u003ccode\u003e1c625b7\u003c/code\u003e\u003c/a\u003e Update version in README.md to 2.10.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/fd2094bb7b58438176d65722d77c021750a16f84\"\u003e\u003ccode\u003efd2094b\u003c/code\u003e\u003c/a\u003e Prep 2.10.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/58d24880a0053c9ec3ce7e3c35aef6d51d600921\"\u003e\u003ccode\u003e58d2488\u003c/code\u003e\u003c/a\u003e build(deps): bump github/codeql-action from 4.35.2 to 4.36.1 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1052\"\u003e#1052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/8df942058831baec6258f712d42a0bcb03729134\"\u003e\u003ccode\u003e8df9420\u003c/code\u003e\u003c/a\u003e build(deps): bump zizmorcore/zizmor-action from 0.5.3 to 0.5.6 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1044\"\u003e#1044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/3f618d3cde900cd89545d6a3fa4d41612f3b83df\"\u003e\u003ccode\u003e3f618d3\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1053\"\u003e#1053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/4849132c9ec7a2b0b160ec4276408659d0cdcede\"\u003e\u003ccode\u003e4849132\u003c/code\u003e\u003c/a\u003e Restrict OIDC token to publish job (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1050\"\u003e#1050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/c1eb69a71306be7a3ffbbf2bdb59a4cb4eeaa414\"\u003e\u003ccode\u003ec1eb69a\u003c/code\u003e\u003c/a\u003e Fix KeyError when OSV affected entry omits optional \u003ccode\u003eranges\u003c/code\u003e field (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/68de07fb9637027f61df7df2620da93f9deb11ec\"\u003e\u003ccode\u003e68de07f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1054\"\u003e#1054\u003c/a\u003e from pypa/fix/1047\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/ef31c9ea7ae844d6f9c1f85efceb9d4a2533ef5a\"\u003e\u003ccode\u003eef31c9e\u003c/code\u003e\u003c/a\u003e Formatting fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/pip-audit/compare/v2.10.0...v2.10.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 4.5.1 to 4.7.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.7.0\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks during commit with \u003ccode\u003e-a\u003c/code\u003e or inside a submodule.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3773\"\u003e#3773\u003c/a\u003e issue by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e PR by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.6.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks that contain \u003ccode\u003e\u0026quot;scripts\u0026quot;: {\u0026quot;build\u0026quot;: ...}\u003c/code\u003e with\nnpm 11.x.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3737\"\u003e#3737\u003c/a\u003e issue by \u003ca href=\"https://github.com/mheiges\"\u003e\u003ccode\u003e@​mheiges\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.6.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInstall \u003ccode\u003elanguage: node\u003c/code\u003e hooks via \u003ccode\u003egit\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003eFixes npm 12.x compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3719\"\u003e#3719\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3517\"\u003e#3517\u003c/a\u003e issue by \u003ca href=\"https://github.com/ojob\"\u003e\u003ccode\u003e@​ojob\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003eJULIA_DEPOT_PATH\u003c/code\u003e for \u003ccode\u003elanguage: julia\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3711\"\u003e#3711\u003c/a\u003e PR by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit-ci/runner-image/issues/335\"\u003epre-commit-ci/runner-image#335\u003c/a\u003e issue by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eProduce error on mistyped \u003ccode\u003e--repo\u003c/code\u003e for \u003ccode\u003epre-commit autoupdate\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3701\"\u003e#3701\u003c/a\u003e PR by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3695\"\u003e#3695\u003c/a\u003e issue by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eImprove performance of commit existence check in \u003ccode\u003epre-push\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3726\"\u003e#3726\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3604\"\u003e#3604\u003c/a\u003e issue by \u003ca href=\"https://github.com/ptarjan\"\u003e\u003ccode\u003e@​ptarjan\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAvoid duplicating conflicted filenames during \u003ccode\u003epre-commit run --all-files\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3727\"\u003e#3727\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3706\"\u003e#3706\u003c/a\u003e issue by \u003ca href=\"https://github.com/RomanValov\"\u003e\u003ccode\u003e@​RomanValov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.6.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier usage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.7.0 - 2026-10-12\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks during commit with \u003ccode\u003e-a\u003c/code\u003e or inside a submodule.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3773\"\u003e#3773\u003c/a\u003e issue by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e PR by \u003ca href=\"https://github.com/cbirkhold\"\u003e\u003ccode\u003e@​cbirkhold\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.6.2 - 2026-08-10\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks that contain \u003ccode\u003e\u0026quot;scripts\u0026quot;: {\u0026quot;build\u0026quot;: ...}\u003c/code\u003e with\nnpm 11.x.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3737\"\u003e#3737\u003c/a\u003e issue by \u003ca href=\"https://github.com/mheiges\"\u003e\u003ccode\u003e@​mheiges\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.6.1 - 2026-07-21\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInstall \u003ccode\u003elanguage: node\u003c/code\u003e hooks via \u003ccode\u003egit\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003eFixes npm 12.x compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3719\"\u003e#3719\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3517\"\u003e#3517\u003c/a\u003e issue by \u003ca href=\"https://github.com/ojob\"\u003e\u003ccode\u003e@​ojob\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003eJULIA_DEPOT_PATH\u003c/code\u003e for \u003ccode\u003elanguage: julia\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3711\"\u003e#3711\u003c/a\u003e PR by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit-ci/runner-image/issues/335\"\u003epre-commit-ci/runner-image#335\u003c/a\u003e issue by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eProduce error on mistyped \u003ccode\u003e--repo\u003c/code\u003e for \u003ccode\u003epre-commit autoupdate\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3701\"\u003e#3701\u003c/a\u003e PR by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3695\"\u003e#3695\u003c/a\u003e issue by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eImprove performance of commit existence check in \u003ccode\u003epre-push\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3726\"\u003e#3726\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3604\"\u003e#3604\u003c/a\u003e issue by \u003ca href=\"https://github.com/ptarjan\"\u003e\u003ccode\u003e@​ptarjan\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAvoid duplicating conflicted filenames during \u003ccode\u003epre-commit run --all-files\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3727\"\u003e#3727\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3706\"\u003e#3706\u003c/a\u003e issue by \u003ca href=\"https://github.com/RomanValov\"\u003e\u003ccode\u003e@​RomanValov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.6.0 - 2026-04-21\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier\nusage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/65bb884a567e8be6adc51e8bfbcf26f708eb35a2\"\u003e\u003ccode\u003e65bb884\u003c/code\u003e\u003c/a\u003e v4.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/73926c191e10d2ede0ca627632e6e697d8092a61\"\u003e\u003ccode\u003e73926c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3774\"\u003e#3774\u003c/a\u003e from cbirkhold/node-no-git-env-npm-install\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/860d07d18211a0154ffaa4e77bf2a43c2b2473a9\"\u003e\u003ccode\u003e860d07d\u003c/code\u003e\u003c/a\u003e don't leak GIT_* env into \u003ccode\u003enpm install\u003c/code\u003e for \u003ccode\u003elanguage: node\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9ad8a0a99acec306e6e9c32490b0088008b83069\"\u003e\u003ccode\u003e9ad8a0a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3775\"\u003e#3775\u003c/a\u003e from pre-commit/contextlib-chdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9905e88afc7d860ccf21fba40fc9f5f23e0e0100\"\u003e\u003ccode\u003e9905e88\u003c/code\u003e\u003c/a\u003e use contextlib.chdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/59cb7925317a3c548ccb8cb17bbfb09d81ac8367\"\u003e\u003ccode\u003e59cb792\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3771\"\u003e#3771\u003c/a\u003e from pre-commit/all-repos_autofix_py311-plus\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2be170142fb6e0f1402a8bf036b5c9f8dd27fd09\"\u003e\u003ccode\u003e2be1701\u003c/code\u003e\u003c/a\u003e remove triple-nested withs for 3.14 coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/4c8d22aa125e68c6f45b4f71359c1bd7942f844f\"\u003e\u003ccode\u003e4c8d22a\u003c/code\u003e\u003c/a\u003e py311+\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/c4292384c94590cd8e6c68f677d95e3675994602\"\u003e\u003ccode\u003ec429238\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3770\"\u003e#3770\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f49e251f379f2c704e1223a791766e2bc9c78602\"\u003e\u003ccode\u003ef49e251\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.5.1...v4.7.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/Patechoc/mapnificently/pull/4","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Patechoc%2Fmapnificently/issues/4","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4/packages"}},{"old_version":"\u003e=2.13.5","new_version":"\u003e=2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-21T13:07:13.000Z","version_change":"\u003e=2.13.5 → \u003e=2.14.1","issue":{"uuid":"5961096201","node_id":"PR_kwDOS6QFYc8AAAABJyqWdw","number":348,"state":"closed","title":"chore(deps): Update pydantic requirement from \u003e=2.13.5 to \u003e=2.14.1","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":4,"pull_request":true,"closed_at":"2026-10-23T11:39:03.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-21T13:07:13.000Z","updated_at":"2026-10-23T11:39:06.000Z","time_to_close":167510,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Update","packages":[{"name":"pydantic","old_version":"\u003e=2.13.5","new_version":"\u003e=2.14.1","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pydantic](https://github.com/pydantic/pydantic) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...v2.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 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/baby-feelings/cyberattack_info_api/pull/348","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/baby-feelings%2Fcyberattack_info_api/issues/348","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/348/packages"}},{"old_version":"2.13.4","new_version":"2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-21T07:14:07.000Z","version_change":"2.13.4 → 2.14.1","issue":{"uuid":"5956080873","node_id":"PR_kwDOKznBOM8AAAABJuoZLQ","number":14469,"state":"closed","title":"Bump the python group with 14 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-10-21T07:24:19.000Z","author_association":null,"state_reason":null,"created_at":"2026-10-21T07:14:07.000Z","updated_at":"2026-10-21T07:24:29.000Z","time_to_close":612,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":14,"packages":[{"name":"typer","old_version":"0.27.1","new_version":"0.27.3","repository_url":"https://github.com/fastapi/typer"},{"name":"fastapi","old_version":"0.141.1","new_version":"0.143.0","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.52.1","new_version":"0.54.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pydantic","old_version":"2.13.4","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"},{"name":"datasets","old_version":"4.3.0","new_version":"5.1.0","repository_url":"https://github.com/huggingface/datasets"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [typer](https://github.com/fastapi/typer), [huggingface-hub](https://github.com/huggingface/huggingface_hub), [fastapi](https://github.com/fastapi/fastapi), [uvicorn](https://github.com/Kludex/uvicorn), [pydantic](https://github.com/pydantic/pydantic), [datasets](https://github.com/huggingface/datasets), [ddgs](https://github.com/deedy5/ddgs), [cryptography](https://github.com/pyca/cryptography), pymupdf4llm, [transformers](https://github.com/huggingface/transformers), [bitsandbytes](https://github.com/bitsandbytes-foundation/bitsandbytes), [torch](https://github.com/pytorch/pytorch), [torchvision](https://github.com/pytorch/vision) and [setuptools-scm](https://github.com/pypa/setuptools-scm) to permit the latest version.\nUpdates `typer` from 0.27.1 to 0.27.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/typer/releases\"\u003etyper's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.27.3\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Escape terminal control characters in error messages. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1972\"\u003e#1972\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump pyjwt from 2.13.0 to 2.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1969\"\u003e#1969\u003c/a\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 urllib3 from 2.7.0 to 2.8.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1968\"\u003e#1968\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 11.0 to 11.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1924\"\u003e#1924\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 7 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1966\"\u003e#1966\u003c/a\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 cryptography from 48.0.1 to 50.0.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1920\"\u003e#1920\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1967\"\u003e#1967\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 3 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1965\"\u003e#1965\u003c/a\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 anyio from 4.12.0 to 4.14.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1959\"\u003e#1959\u003c/a\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✅ Fix flaky \u003ccode\u003eapp_dir\u003c/code\u003e and \u003ccode\u003elaunch\u003c/code\u003e tutorial tests under \u003ccode\u003exdist\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1951\"\u003e#1951\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1948\"\u003e#1948\u003c/a\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 annotated-doc from 0.0.4 to 0.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1949\"\u003e#1949\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1950\"\u003e#1950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1947\"\u003e#1947\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.27.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Create \u003ccode\u003eexceptions\u003c/code\u003e module and \u003ccode\u003eTyperException\u003c/code\u003e base class. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1942\"\u003e#1942\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix showing \u003ccode\u003efast\u003c/code\u003e button as external link in animated terminals in docs. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1912\"\u003e#1912\u003c/a\u003e by \u003ca href=\"https://github.com/phalberg\"\u003e\u003ccode\u003e@​phalberg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Bump setup-uv action to 10.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1940\"\u003e#1940\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👷 Migrate automatic labels to Latest Changes. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1931\"\u003e#1931\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Remove legacy label check. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1930\"\u003e#1930\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔐 Use PR Submit for pull requests. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1928\"\u003e#1928\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use GitHub CLI for Git authentication. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1927\"\u003e#1927\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use PR Push commit identity. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1926\"\u003e#1926\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒 Replace pre-commit PAT with PR Push. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1923\"\u003e#1923\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Remove Zensical docs cache. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1922\"\u003e#1922\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove the old Latest Changes workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1921\"\u003e#1921\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1917\"\u003e#1917\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 10.21.3 to 11.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1910\"\u003e#1910\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 5 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1916\"\u003e#1916\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/typer/blob/master/docs/release-notes.md\"\u003etyper's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.27.3 (2026-10-06)\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Escape terminal control characters in error messages. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1972\"\u003e#1972\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump pyjwt from 2.13.0 to 2.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1969\"\u003e#1969\u003c/a\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 urllib3 from 2.7.0 to 2.8.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1968\"\u003e#1968\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 11.0 to 11.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1924\"\u003e#1924\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 7 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1966\"\u003e#1966\u003c/a\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 cryptography from 48.0.1 to 50.0.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1920\"\u003e#1920\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1967\"\u003e#1967\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 3 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1965\"\u003e#1965\u003c/a\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 anyio from 4.12.0 to 4.14.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1959\"\u003e#1959\u003c/a\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✅ Fix flaky \u003ccode\u003eapp_dir\u003c/code\u003e and \u003ccode\u003elaunch\u003c/code\u003e tutorial tests under \u003ccode\u003exdist\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1951\"\u003e#1951\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1948\"\u003e#1948\u003c/a\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 annotated-doc from 0.0.4 to 0.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1949\"\u003e#1949\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1950\"\u003e#1950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1947\"\u003e#1947\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.27.2 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Create \u003ccode\u003eexceptions\u003c/code\u003e module and \u003ccode\u003eTyperException\u003c/code\u003e base class. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1942\"\u003e#1942\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix showing \u003ccode\u003efast\u003c/code\u003e button as external link in animated terminals in docs. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1912\"\u003e#1912\u003c/a\u003e by \u003ca href=\"https://github.com/phalberg\"\u003e\u003ccode\u003e@​phalberg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Bump setup-uv action to 10.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1940\"\u003e#1940\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👷 Migrate automatic labels to Latest Changes. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1931\"\u003e#1931\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Remove legacy label check. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1930\"\u003e#1930\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔐 Use PR Submit for pull requests. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1928\"\u003e#1928\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use GitHub CLI for Git authentication. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1927\"\u003e#1927\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use PR Push commit identity. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1926\"\u003e#1926\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒 Replace pre-commit PAT with PR Push. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1923\"\u003e#1923\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Remove Zensical docs cache. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1922\"\u003e#1922\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove the old Latest Changes workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1921\"\u003e#1921\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1917\"\u003e#1917\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 10.21.3 to 11.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1910\"\u003e#1910\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group with 5 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1916\"\u003e#1916\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/b15210b71a5b9b35be82a1ffdb172ef7b3a89d85\"\u003e\u003ccode\u003eb15210b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.27.3 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1973\"\u003e#1973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/8bfe6d1599d19fd2175722dc9b9cb576e331c43d\"\u003e\u003ccode\u003e8bfe6d1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/a74010f845e8771e574cc9a033cd53f449383c61\"\u003e\u003ccode\u003ea74010f\u003c/code\u003e\u003c/a\u003e 🐛 Escape terminal control characters in error messages (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1972\"\u003e#1972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/11b083b92126fb8e149ab9e7d5c9a0f5594dfe58\"\u003e\u003ccode\u003e11b083b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/910a474f3071012c3c512aad3b6e10c6e9af9dcf\"\u003e\u003ccode\u003e910a474\u003c/code\u003e\u003c/a\u003e ⬆ Bump pyjwt from 2.13.0 to 2.15.0 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1969\"\u003e#1969\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/33b1eec0e20df3695de0b4ad7af0dff89608b12b\"\u003e\u003ccode\u003e33b1eec\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/62f1d4acd95c52c12490d313d2dea27846d23f46\"\u003e\u003ccode\u003e62f1d4a\u003c/code\u003e\u003c/a\u003e ⬆ Bump urllib3 from 2.7.0 to 2.8.0 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1968\"\u003e#1968\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/ffc8b9ae61d98fd48d52494e3f7286fda763fbe5\"\u003e\u003ccode\u003effc8b9a\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/1b7ceee5da625df3c679a55f9e6d25e31ab5f5c2\"\u003e\u003ccode\u003e1b7ceee\u003c/code\u003e\u003c/a\u003e ⬆ Bump pymdown-extensions from 11.0 to 11.0.1 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1924\"\u003e#1924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/40c39c11ce29ea0272134a0a50b2668105cd714f\"\u003e\u003ccode\u003e40c39c1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/typer/compare/0.27.1...0.27.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `huggingface-hub` to 2.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/huggingface/huggingface_hub/releases\"\u003ehuggingface-hub's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[v2.2.0] \u003ccode\u003ehf jobs stats\u003c/code\u003e snapshots, download and \u003ccode\u003eHfFileSystem\u003c/code\u003e fixes\u003c/h2\u003e\n\u003cp\u003eA small release this week, mostly bug fixes and quality-of-life improvements. \u003ccode\u003ehf jobs stats\u003c/code\u003e now returns right away instead of streaming forever, concurrent downloads reliably use \u003ccode\u003ehf_xet\u003c/code\u003e, and \u003ccode\u003eHfFileSystem\u003c/code\u003e caching is more predictable. Two behavior changes are listed under \u003ca href=\"https://github.com/huggingface/huggingface_hub/blob/HEAD/#-breaking-changes\"\u003eBreaking changes\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003e📊 \u003ccode\u003ehf jobs stats\u003c/code\u003e prints a snapshot by default\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehf jobs stats\u003c/code\u003e used to stream metrics until the job finished, so scripts and agents calling it on a running job hung until their own timeout. It now prints the latest sample of each job once and exits, like \u003ccode\u003ehf jobs logs\u003c/code\u003e and \u003ccode\u003ehf spaces logs\u003c/code\u003e. Use \u003ccode\u003e-f/--follow\u003c/code\u003e for the previous live view. Snapshot output also supports \u003ccode\u003e--format json|agent|quiet\u003c/code\u003e, which outputs the raw API metrics.\u003c/p\u003e\n\u003cp\u003eOn the Python side, \u003ccode\u003eHfApi.fetch_job_metrics\u003c/code\u003e gets the same \u003ccode\u003efollow\u003c/code\u003e parameter as \u003ccode\u003efetch_job_logs\u003c/code\u003e. It defaults to \u003ccode\u003eFalse\u003c/code\u003e and returns only the current sample. Pass \u003ccode\u003efollow=True\u003c/code\u003e to stream until the job completes.\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003e\u0026gt;\u0026gt;\u0026gt; hf jobs stats 6ac3bd9afbc85ba6823a9ad4\r\nJOB ID                CPU % NUM CPU MEM % MEM USAGE      NET I/O         GPU UTIL % GPU MEM % GPU MEM USAGE\r\n--------------------- ----- ------- ----- -------------- --------------- ---------- --------- -------------\r\n6ac3bd9afbc85ba682... 0%    2.0     0.01% 1.0MB / 16.0GB 0.0bps / 0.0bps N/A        N/A       N/A\r\nHint: Use `hf jobs stats -f celinah/6ac3bd9afbc85ba6823a9ad4` to follow live stats.\r\n\u003ch1\u003eStream live stats until the job completes\u003c/h1\u003e\n\u003cp\u003e\u0026gt;\u0026gt;\u0026gt; hf jobs stats -f 6ac3bd9afbc85ba6823a9ad4\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003e\u0026gt;\u0026gt;\u0026gt; from huggingface_hub import fetch_job_metrics\r\n\u0026gt;\u0026gt;\u0026gt; for metrics in fetch_job_metrics(job_id=job.id, follow=True):\r\n...     print(metrics)\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOther Jobs fixes in this release: \u003ccode\u003ehf jobs logs\u003c/code\u003e and \u003ccode\u003ehf spaces logs\u003c/code\u003e without \u003ccode\u003e-f\u003c/code\u003e no longer hang while the job keeps printing, \u003ccode\u003ehf jobs stats\u003c/code\u003e no longer fails when one of the requested jobs has finished, and \u003ccode\u003ehf jobs stats --json\u003c/code\u003e prints \u003ccode\u003e[]\u003c/code\u003e when no job is running.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e[CLI] Snapshot by default in hf jobs stats, add -f/--follow by \u003ca href=\"https://github.com/hanouticelina\"\u003e\u003ccode\u003e@​hanouticelina\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5090\"\u003e#5090\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[CLI] Fix empty hf jobs stats --json output with no running jobs by \u003ca href=\"https://github.com/hanouticelina\"\u003e\u003ccode\u003e@​hanouticelina\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5094\"\u003e#5094\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[Jobs] Fix no-follow logs hanging while the job keeps printing by \u003ca href=\"https://github.com/hanouticelina\"\u003e\u003ccode\u003e@​hanouticelina\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5092\"\u003e#5092\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[Jobs] Ignore 406 from metrics endpoint for finished jobs by \u003ca href=\"https://github.com/hanouticelina\"\u003e\u003ccode\u003e@​hanouticelina\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5091\"\u003e#5091\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e📚 \u003cstrong\u003eDocumentation:\u003c/strong\u003e \u003ca href=\"https://huggingface.co/docs/huggingface_hub/main/en/guides/jobs\"\u003eJobs guide\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e⚡ Concurrent downloads always use \u003ccode\u003ehf_xet\u003c/code\u003e\u003c/h2\u003e\n\u003cp\u003eIn a fresh process, the first concurrent \u003ccode\u003ehf_hub_download\u003c/code\u003e calls could read a placeholder version for \u003ccode\u003ehf_xet\u003c/code\u003e while another thread was still looking it up. Those calls treated \u003ccode\u003ehf_xet\u003c/code\u003e as missing and downloaded through the plain HTTP path. This mostly affected parallel downloads such as \u003ccode\u003esnapshot_download\u003c/code\u003e, where some of the files skipped Xet. The version lookup is now cached only once it is resolved, so every download sees the real value.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix race in \u003ccode\u003e_get_version\u003c/code\u003e that makes concurrent downloads skip hf_xet by \u003ca href=\"https://github.com/BramVanroy\"\u003e\u003ccode\u003e@​BramVanroy\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5102\"\u003e#5102\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e📂 \u003ccode\u003eHfFileSystem\u003c/code\u003e cache fixes\u003c/h2\u003e\n\u003cp\u003eThree fixes to how \u003ccode\u003eHfFileSystem\u003c/code\u003e caches listings and missing paths:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003els()\u003c/code\u003e on a newly created empty bucket returns an empty list instead of raising \u003ccode\u003eFileNotFoundError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDirectory listings are now replaced in the cache instead of appended to. Before, \u003ccode\u003els()\u003c/code\u003e after \u003ccode\u003efind()\u003c/code\u003e or \u003ccode\u003els(refresh=True)\u003c/code\u003e could return duplicate entries, \u003ccode\u003erefresh=True\u003c/code\u003e kept deleted files, and listing a single bucket file cached it as the whole folder's listing.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eexists(path, refresh=True)\u003c/code\u003e and \u003ccode\u003einvalidate_cache(path)\u003c/code\u003e now clear cached \u0026quot;not found\u0026quot; results. Before, a repo, branch or bucket created in the same process stayed missing until a full \u003ccode\u003einvalidate_cache()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/acfdf30d99441317270cca6e9362dd7f9ff47c55\"\u003e\u003ccode\u003eacfdf30\u003c/code\u003e\u003c/a\u003e Release: v2.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/193d9d921f9c7a4b57cb664d89108bf50dcf06c6\"\u003e\u003ccode\u003e193d9d9\u003c/code\u003e\u003c/a\u003e Release: v2.2.0.rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/5be356510bbd151bc8310d9da989501cbe004779\"\u003e\u003ccode\u003e5be3565\u003c/code\u003e\u003c/a\u003e [Cache] Speed up delete_revisions with a set lookup (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5118\"\u003e#5118\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/dab6a964b1e522f50e6bd1dd6a0056b8bb8de5cc\"\u003e\u003ccode\u003edab6a96\u003c/code\u003e\u003c/a\u003e [CLI] Don't glob-expand arguments on Windows (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5117\"\u003e#5117\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/cca4d3a3bfe057911211a4857d5776d075a3bf6a\"\u003e\u003ccode\u003ecca4d3a\u003c/code\u003e\u003c/a\u003e [Download] Fix offline snapshot_download with a pinned revision (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5113\"\u003e#5113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/c6cc03e179191985b52e1f0956766d944b46a10b\"\u003e\u003ccode\u003ec6cc03e\u003c/code\u003e\u003c/a\u003e Fix argument name in raise_text_generation_error docstring (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5108\"\u003e#5108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/8abbfe56999a650d84e35204c0f4f71d16087bb8\"\u003e\u003ccode\u003e8abbfe5\u003c/code\u003e\u003c/a\u003e Fix race in \u003ccode\u003e_get_version\u003c/code\u003e that makes concurrent downloads skip hf_xet (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5102\"\u003e#5102\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/bb3a875b13b131d06a10325b2f07d6de4776966f\"\u003e\u003ccode\u003ebb3a875\u003c/code\u003e\u003c/a\u003e [Docs] Fix from_pretrained integration example (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5105\"\u003e#5105\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/cf992a93d6b7481158eac47469be763dcd8d58f0\"\u003e\u003ccode\u003ecf992a9\u003c/code\u003e\u003c/a\u003e [HfFileSystem] Make refresh=True clear cached not-found results (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/af741671a6e49296b22f1b827298b3c688769a48\"\u003e\u003ccode\u003eaf74167\u003c/code\u003e\u003c/a\u003e [Tests] Wait for bucket listings after writes (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/huggingface/huggingface_hub/compare/v1.32.0...v2.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi` from 0.141.1 to 0.143.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.143.0\u003c/h2\u003e\n\u003cp\u003eAutomatic OpenTelemetry exporter setup is now opt-in. If you rely on FastAPI to configure exporters from \u003ccode\u003eOTEL_*\u003c/code\u003e environment variables, set \u003ccode\u003eFASTAPI_OTEL_AUTO_CONFIGURE=true\u003c/code\u003e or use \u003ccode\u003eFastAPI(telemetry={\u0026quot;auto_configure\u0026quot;: True})\u003c/code\u003e to retain the previous behavior.\u003c/p\u003e\n\u003cp\u003eApplications that configure their own providers and exporters require no changes. FastAPI Cloud enables automatic setup for you.\u003c/p\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e💥 Require opt-in for automatic OpenTelemetry exporter setup. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16476\"\u003e#16476\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.142.4\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Isolate FastAPI telemetry for excluded requests. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16470\"\u003e#16470\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.142.3\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Cache OpenTelemetry tracers to preserve warning deduplication. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16468\"\u003e#16468\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📝 Remove HTML title from newsletter to avoid the tooltip. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16461\"\u003e#16461\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Embed the FastAPI and friends newsletter signup form. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16459\"\u003e#16459\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update skill, use Asyncer for blocking code in threads. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16420\"\u003e#16420\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for fr (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16436\"\u003e#16436\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16435\"\u003e#16435\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16434\"\u003e#16434\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16433\"\u003e#16433\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16432\"\u003e#16432\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16431\"\u003e#16431\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16430\"\u003e#16430\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16429\"\u003e#16429\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16428\"\u003e#16428\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16425\"\u003e#16425\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16426\"\u003e#16426\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16427\"\u003e#16427\u003c/a\u003e by \u003ca href=\"https://github.com/apps/pr-submit\"\u003e\u003ccode\u003e@​pr-submit[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update Russian LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16449\"\u003e#16449\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👷 Fix deprecated command in \u003ccode\u003ebump-pre-commit-hooks\u003c/code\u003e workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16463\"\u003e#16463\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 sponsors: remove Render. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16457\"\u003e#16457\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔨 Use \u003ccode\u003egpt-6-astra\u003c/code\u003e model for translations. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16453\"\u003e#16453\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 14 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16447\"\u003e#16447\u003c/a\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 starlette from 1.6.0 to 1.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16440\"\u003e#16440\u003c/a\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 pyjwt from 2.13.0 to 2.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16423\"\u003e#16423\u003c/a\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 gitpython from 3.1.60 to 3.1.62. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16444\"\u003e#16444\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/f5c6e9b4f9cadc1bf0f9a1fd672e621206b63007\"\u003e\u003ccode\u003ef5c6e9b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.143.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16477\"\u003e#16477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/182c8b8c83a0c3f19b61e31e092570af7d4e637b\"\u003e\u003ccode\u003e182c8b8\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/af889e400baeb33c1594c84618a806c9c6a7f7ff\"\u003e\u003ccode\u003eaf889e4\u003c/code\u003e\u003c/a\u003e 💥 Require opt-in for automatic OpenTelemetry exporter setup (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16476\"\u003e#16476\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9269f17524e7990c39a9a1708db532810ceffc06\"\u003e\u003ccode\u003e9269f17\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.142.4 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16471\"\u003e#16471\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/78ede017de7ef596b91be036aa31ba331cf77bb6\"\u003e\u003ccode\u003e78ede01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4e31a07bafd08f247f39ab1e9144ba2a62395757\"\u003e\u003ccode\u003e4e31a07\u003c/code\u003e\u003c/a\u003e 🐛 Isolate FastAPI telemetry for excluded requests (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16470\"\u003e#16470\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb8dabcd4a7b44e180d7c258377ae4b0abf99bff\"\u003e\u003ccode\u003ecb8dabc\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.142.3 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16469\"\u003e#16469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/787dc561d524349a6eadca365d4f2844d66b1b9d\"\u003e\u003ccode\u003e787dc56\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/6eae2f3456c889ad791de38dd45c14e17de775d3\"\u003e\u003ccode\u003e6eae2f3\u003c/code\u003e\u003c/a\u003e 🐛 Cache OpenTelemetry tracers to preserve warning deduplication (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16468\"\u003e#16468\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/94918c1d40afb27065c64d523219ed2ad9822f76\"\u003e\u003ccode\u003e94918c1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.141.1...0.143.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.52.1 to 0.54.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.54.0\u003c/h2\u003e\n\u003ch2\u003e📨 Send metadata after the response body\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.54.0 adds response trailers and \u003ccode\u003e103 Early Hints\u003c/code\u003e to its experimental HTTP/2 implementation through \u003ccode\u003ezttp\u003c/code\u003e.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.54.0 \u0026quot;zttp\u0026gt;=0.0.34\u0026quot;\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend HTTP/2 response trailers\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e). The ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension lets applications send metadata, such as checksums, after the response body. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them. Multiple trailer messages are combined before completing the response.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental and opt-in.\u003c/strong\u003e Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Upgrade-based h2c and WebSockets over HTTP/2 remain unsupported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e💡 Hint at resources before the final response\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSend \u003ccode\u003e103 Early Hints\u003c/code\u003e over HTTP/2\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e). Applications can use the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension to send resource hints before the final response. Each supplied link becomes a separate \u003ccode\u003eLink\u003c/code\u003e header.\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.53.0...0.54.0\"\u003e0.53.0...0.54.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.53.0\u003c/h2\u003e\n\u003ch2\u003e🌐 Opt-in HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.53.0 adds experimental HTTP/2 through \u003ccode\u003ezttp\u003c/code\u003e, alongside a new \u003ccode\u003ezuvloop\u003c/code\u003e integration and connection-handling improvements.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.53.0\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eServe HTTP/1.1 and HTTP/2 with \u003ccode\u003ezttp\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e). Install \u003ccode\u003ezttp\u003c/code\u003e, then enable HTTP/2 with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Uvicorn negotiates HTTP/2 over TLS with ALPN and supports cleartext prior knowledge.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental.\u003c/strong\u003e Upgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚙️ More event loop choice\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eRun Uvicorn with \u003ccode\u003ezuvloop\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e). Install \u003ccode\u003ezuvloop\u003c/code\u003e separately and select it explicitly with \u003ccode\u003e--loop zuvloop\u003c/code\u003e on CPython 3.14 or newer.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🛡️ More reliable connections and proxies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHonor \u003ccode\u003eConnection: close\u003c/code\u003e token lists\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e). Uvicorn now parses comma-separated tokens case-insensitively across HTTP implementations.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTrust IPv6 loopback proxies by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e). The default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value now includes \u003ccode\u003e::1\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKeep upgraded WebSockets alive\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e). Uvicorn cancels the HTTP keep-alive timer when the connection becomes a WebSocket.\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.52.4...0.53.0\"\u003e0.52.4...0.53.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\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.52.3...0.52.4\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/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.54.0 (September 24, 2026)\u003c/h2\u003e\n\u003cp\u003eHTTP/2 support remains experimental. Install \u003ccode\u003ezttp\u0026gt;=0.0.34\u003c/code\u003e and enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd HTTP/2 response trailers through the ASGI \u003ccode\u003ehttp.response.trailers\u003c/code\u003e extension. Clients must send \u003ccode\u003eTE: trailers\u003c/code\u003e to receive them (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3146\"\u003e#3146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd HTTP/2 \u003ccode\u003e103 Early Hints\u003c/code\u003e through the ASGI \u003ccode\u003ehttp.response.early_hint\u003c/code\u003e extension (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.53.0 (September 14, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release adds experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e. Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\nUpgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003ezuvloop\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle comma-separated, case-insensitive \u003ccode\u003eConnection: close\u003c/code\u003e tokens across HTTP implementations (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTrust IPv6 loopback in the default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancel the HTTP keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.4 (August 18, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.3 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.2 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\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/3eb9a9ab9af69005c687728097461c1fd2a95db9\"\u003e\u003ccode\u003e3eb9a9a\u003c/code\u003e\u003c/a\u003e Version 0.54.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3161\"\u003e#3161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/cd7ef6d31c1a09a3653f326cda7813d35ffd6082\"\u003e\u003ccode\u003ecd7ef6d\u003c/code\u003e\u003c/a\u003e Remove races from supervisor tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3134\"\u003e#3134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a56c7cce64aaa37e5864f882a5cbce8aa1dac47a\"\u003e\u003ccode\u003ea56c7cc\u003c/code\u003e\u003c/a\u003e Support HTTP/2 response trailers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3146\"\u003e#3146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9bd4404cca9506e9ba4f46b69ef72d011ceef2bd\"\u003e\u003ccode\u003e9bd4404\u003c/code\u003e\u003c/a\u003e chore(deps): bump anyio from 4.13.0 to 4.14.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3145\"\u003e#3145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/21f39ef7988366f77fb3172569bd235ac5de34cc\"\u003e\u003ccode\u003e21f39ef\u003c/code\u003e\u003c/a\u003e Add HTTP/2 Early Hints support (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/421708fbc1a704dac8bd4053a7c4c0bf4d3704ee\"\u003e\u003ccode\u003e421708f\u003c/code\u003e\u003c/a\u003e Version 0.53.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3136\"\u003e#3136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/f1a1bff7be819f5724d6fdf86dfd448a97c62e23\"\u003e\u003ccode\u003ef1a1bff\u003c/code\u003e\u003c/a\u003e Unset the keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/63971ed952090438896e6eba7d07178b616d97cc\"\u003e\u003ccode\u003e63971ed\u003c/code\u003e\u003c/a\u003e Document HTTP/2 support (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3130\"\u003e#3130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7d1a0055aee5e281accc646b559ddd147486bf8a\"\u003e\u003ccode\u003e7d1a005\u003c/code\u003e\u003c/a\u003e Remove race from multiprocess health check test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3128\"\u003e#3128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/5ac6265a01ff6dcadb0e4250152c3deaf8a168a9\"\u003e\u003ccode\u003e5ac6265\u003c/code\u003e\u003c/a\u003e Add ::1 to FORWARDED_ALLOW_IPS (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.1...0.54.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.4 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `datasets` from 4.3.0 to 5.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/huggingface/datasets/releases\"\u003edatasets's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.1.0\u003c/h2\u003e\n\u003ch2\u003eNew Formats\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHarbor\u003c/strong\u003e ⚓: RL environments:\n\u003cul\u003e\n\u003cli\u003eAdd harbor benchmarks by \u003ca href=\"https://github.com/lhoestq\"\u003e\u003ccode\u003e@​lhoestq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8729\"\u003ehuggingface/datasets#8729\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVortex\u003c/strong\u003e 🌀: High performance columnar data\n\u003cul\u003e\n\u003cli\u003eAdd support for datasets backed by vortex file format by \u003ca href=\"https://github.com/robert3005\"\u003e\u003ccode\u003e@​robert3005\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8502\"\u003ehuggingface/datasets#8502\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBio formats\u003c/strong\u003e 🧬: store biological data like DNA sequences, protein chains, and 3D molecular structures\n\u003cul\u003e\n\u003cli\u003efeat(fasta): add lightweight FASTA file format support by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/7923\"\u003ehuggingface/datasets#7923\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDecode BioSequence and BioStructure records with universal newlines by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8600\"\u003ehuggingface/datasets#8600\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd lightweight FASTQ file format support by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/7924\"\u003ehuggingface/datasets#7924\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Add GenBank file format support for biological sequence data by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/7951\"\u003ehuggingface/datasets#7951\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd lightweight PDB (Protein Data Bank) file support by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/7926\"\u003ehuggingface/datasets#7926\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Add mmCIF file support for macromolecular structures by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/7925\"\u003ehuggingface/datasets#7925\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(features): add BioSequence and BioStructure decodable features by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8542\"\u003ehuggingface/datasets#8542\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDataset Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a strategy argument to split_dataset_by_node for iterable datasets by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8565\"\u003ehuggingface/datasets#8565\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow IterableDataset.push_to_hub num_shards above dataset.num_shards by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8716\"\u003ehuggingface/datasets#8716\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eOther improvements and bug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix fixed size binary by \u003ca href=\"https://github.com/Alex-PLACET\"\u003e\u003ccode\u003e@​Alex-PLACET\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8281\"\u003ehuggingface/datasets#8281\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix offline simulation with huggingface_hub 1.27 by \u003ca href=\"https://github.com/hanouticelina\"\u003e\u003ccode\u003e@​hanouticelina\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8414\"\u003ehuggingface/datasets#8414\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix info from data_dir/data_files or malformed yaml by \u003ca href=\"https://github.com/lhoestq\"\u003e\u003ccode\u003e@​lhoestq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8462\"\u003ehuggingface/datasets#8462\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eForward iter_arrow, is_typed and features from RepeatExamplesIterable by \u003ca href=\"https://github.com/ebarkhordar\"\u003e\u003ccode\u003e@​ebarkhordar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8395\"\u003ehuggingface/datasets#8395\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix archive path check allowing sibling-directory escapes by \u003ca href=\"https://github.com/icn5381\"\u003e\u003ccode\u003e@​icn5381\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8490\"\u003ehuggingface/datasets#8490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edisallow hdf5 external links by \u003ca href=\"https://github.com/lhoestq\"\u003e\u003ccode\u003e@​lhoestq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8523\"\u003ehuggingface/datasets#8523\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edeepcopy\u003c/code\u003e bottleneck in state_dict() by \u003ca href=\"https://github.com/yuxin00j\"\u003e\u003ccode\u003e@​yuxin00j\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8387\"\u003ehuggingface/datasets#8387\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eOptimize PyArrow block shuffling with dynamic rebatched chunk interleaving by \u003ca href=\"https://github.com/yuxin00j\"\u003e\u003ccode\u003e@​yuxin00j\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8407\"\u003ehuggingface/datasets#8407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Pdf.decode_example raising TypeError on remote non-Hub paths by \u003ca href=\"https://github.com/behroozazarkhalili\"\u003e\u003ccode\u003e@​behroozazarkhalili\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8566\"\u003ehuggingface/datasets#8566\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dead PDF processing link in README by \u003ca href=\"https://github.com/aarushkandukoori\"\u003e\u003ccode\u003e@​aarushkandukoori\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8512\"\u003ehuggingface/datasets#8512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eForward max_buffer_input_shards from IterableDatasetDict.shuffle by \u003ca href=\"https://github.com/vineethsaivs\"\u003e\u003ccode\u003e@​vineethsaivs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8594\"\u003ehuggingface/datasets#8594\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePreserve storage options across URL hops by \u003ca href=\"https://github.com/tandede\"\u003e\u003ccode\u003e@​tandede\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8496\"\u003ehuggingface/datasets#8496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBetter error when a column written as null gets values in a later batch by \u003ca href=\"https://github.com/ebarkhordar\"\u003e\u003ccode\u003e@​ebarkhordar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8591\"\u003ehuggingface/datasets#8591\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdvance the user-supplied generator in Dataset.shuffle even on cache hits by \u003ca href=\"https://github.com/BenYang12\"\u003e\u003ccode\u003e@​BenYang12\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8589\"\u003ehuggingface/datasets#8589\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump fsspec upper bound to 2026.7.0 by \u003ca href=\"https://github.com/roshanjrajan\"\u003e\u003ccode\u003e@​roshanjrajan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8561\"\u003ehuggingface/datasets#8561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShard the sources when skipping a distributed IterableDataset by \u003ca href=\"https://github.com/ebarkhordar\"\u003e\u003ccode\u003e@​ebarkhordar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8569\"\u003ehuggingface/datasets#8569\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix infinite repetition of empty iterable datasets by \u003ca href=\"https://github.com/Jokasa7\"\u003e\u003ccode\u003e@​Jokasa7\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8577\"\u003ehuggingface/datasets#8577\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject a non-callable generator in GeneratorConfig by \u003ca href=\"https://github.com/LeSingh1\"\u003e\u003ccode\u003e@​LeSingh1\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8585\"\u003ehuggingface/datasets#8585\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix async map checkpoint accounting across repeated resumes by \u003ca href=\"https://github.com/SBrouck\"\u003e\u003ccode\u003e@​SBrouck\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8575\"\u003ehuggingface/datasets#8575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[httpx migration] Import httpx from huggingface_hub, require huggingface_hub\u0026gt;=1.31.0 by \u003ca href=\"https://github.com/Wauplin\"\u003e\u003ccode\u003e@​Wauplin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8598\"\u003ehuggingface/datasets#8598\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: enable Dependabot weekly GitHub Actions bumps by \u003ca href=\"https://github.com/hf-dependantbot-rollout\"\u003e\u003ccode\u003e@​hf-dependantbot-rollout\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8221\"\u003ehuggingface/datasets#8221\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[docs] Fix legacy hf CLI references (datasets) by \u003ca href=\"https://github.com/Wauplin\"\u003e\u003ccode\u003e@​Wauplin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/datasets/pull/8657\"\u003ehuggingface/datasets#8657\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eScope GITHUB_TOKEN permissions per job by \u003ca href=\"https://github.com/hf-s...\n\n_Description has been truncated_","html_url":"https://github.com/unslothai/unsloth/pull/14469","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/unslothai%2Funsloth/issues/14469","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14469/packages"}},{"old_version":"2.13.5","new_version":"2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-20T23:45:47.000Z","version_change":"2.13.5 → 2.14.1","issue":{"uuid":"5951580627","node_id":"PR_kwDOQ3AX588AAAABJrFerA","number":585,"state":"open","title":"chore(deps)(deps): bump the production-dependencies group across 1 directory with 3 updates","user":"dependabot[bot]","labels":["automated","dependencies"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-20T23:45:47.000Z","updated_at":"2026-10-21T00:29:02.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)(deps): bump","group_name":"production-dependencies","update_count":3,"packages":[{"name":"google-adk","old_version":"2.11.0","new_version":"2.12.0","repository_url":"https://github.com/google/adk-python"},{"name":"litellm","old_version":"1.103.2","new_version":"1.105.0","repository_url":"https://github.com/BerriAI/litellm"},{"name":"pydantic","old_version":"2.13.5","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 3 updates in the / directory: [google-adk](https://github.com/google/adk-python), [litellm](https://github.com/BerriAI/litellm) and [pydantic](https://github.com/pydantic/pydantic).\n\nUpdates `google-adk` from 2.11.0 to 2.12.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/google/adk-python/releases\"\u003egoogle-adk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.12.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/google/adk-python/compare/v2.11.0...v2.12.0\"\u003e2.12.0\u003c/a\u003e (2026-10-13)\u003c/h2\u003e\n\u003ch3\u003eHighlights\u003c/h3\u003e\n\u003cp\u003eThis release enhances execution performance in long sessions while introducing finer control over tool execution, workflow approvals, and deployment security.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePerformance\u003c/strong\u003e: Cut time to first model request by 40% in long sessions. (\u003ca href=\"https://github.com/google/adk-python/commit/1754b3eeb6cdb2c16e3b30619a12066623df132e\"\u003e1754b3e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTools\u003c/strong\u003e: Intercept and filter tool outputs before returning them to the model using \u003ccode\u003eafter_tool_callback\u003c/code\u003e. (\u003ca href=\"https://github.com/google/adk-python/commit/fdda17cbcfec35a1cca1638b028c1af98e893eae\"\u003efdda17c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWorkflows\u003c/strong\u003e: Require human confirmation before executing workflow nodes via \u003ccode\u003erequire_confirmation\u003c/code\u003e. (\u003ca href=\"https://github.com/google/adk-python/commit/988fd1a73d174f9e3acb6d2e1bec102f9ec02238\"\u003e988fd1a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDeployment\u003c/strong\u003e: Deploy agents to Agent Engine using dedicated custom service accounts. (\u003ca href=\"https://github.com/google/adk-python/commit/629e11996ebb544ea6b0f652e413955b2dfedeb6\"\u003e629e119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.15\u003c/strong\u003e: Install and run ADK on Python 3.15. (\u003ca href=\"https://github.com/google/adk-python/commit/75aef1ec133c92c9e35f0575392ef5c4e3910b31\"\u003e75aef1e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd --state_file option to adk run (\u003ca href=\"https://github.com/google/adk-python/commit/c390266b51204a1bc59f6671d2674ba6ca1e79ad\"\u003ec390266\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/7083\"\u003e#7083\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd after_tool_callback to screen tool output (\u003ca href=\"https://github.com/google/adk-python/commit/fdda17cbcfec35a1cca1638b028c1af98e893eae\"\u003efdda17c\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/6966\"\u003e#6966\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd skill-level security support to AgentCardBuilder (\u003ca href=\"https://github.com/google/adk-python/commit/79a7e49cd656c1650945e87a955a096c06c09494\"\u003e79a7e49\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eagents:\u003c/strong\u003e adapt BaseNode in tool consumers and preserve ToolUnion compatibility (\u003ca href=\"https://github.com/google/adk-python/commit/8350c143da8837426f18ad75027984fdaacc856b\"\u003e8350c14\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eantigravity:\u003c/strong\u003e preserve model thinking parts, client tool responses, and sub-agent hierarchy in ADK events (\u003ca href=\"https://github.com/google/adk-python/commit/fac77be5d32cf8b07db0162fdd73f5f9155f60bf\"\u003efac77be\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecli:\u003c/strong\u003e source the agent builder assistant's ADK knowledge from the installed package (\u003ca href=\"https://github.com/google/adk-python/commit/ab9fffc9e000c2e5e417f5a66c14cb53250f1511\"\u003eab9fffc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003econtinue with de-identified text when only SDP matched (\u003ca href=\"https://github.com/google/adk-python/commit/315c3dd2cd2710b3ccc2fbb88c22125938d89adf\"\u003e315c3dd\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/7369\"\u003e#7369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eencrypt google credential in session (\u003ca href=\"https://github.com/google/adk-python/commit/42a17a9fd2f14d466f8903f2ba776c90e871455f\"\u003e42a17a9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eeval:\u003c/strong\u003e report the efficiency metrics for evals run from the Dev UI (\u003ca href=\"https://github.com/google/adk-python/commit/49bf291ce63c4756a45dce2f9070053e7ac212ff\"\u003e49bf291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003einstall lightweight Gemini Enterprise (Agent Platform) SDK without the GAPIC stack (\u003ca href=\"https://github.com/google/adk-python/commit/d92735dc71700905a4e72a8d2e5c5ae8ce054a04\"\u003ed92735d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elive:\u003c/strong\u003e add an internal model for Live background tool calls (\u003ca href=\"https://github.com/google/adk-python/commit/3f25ab50227104338f79df3bab6390b0f597e478\"\u003e3f25ab5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elive:\u003c/strong\u003e implement CascadeLive model \u0026amp; sample (\u003ca href=\"https://github.com/google/adk-python/commit/128faabb6dddacf26e029aa8c28c903c3a7a6b61\"\u003e128faab\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emigrate ADK to google-cloud-aiplatform v2.2 (agentplatform) (\u003ca href=\"https://github.com/google/adk-python/commit/77d4dcd0aa8c7ff841160f3c0db3754c347dfc1f\"\u003e77d4dcd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emigrate VertexAiExampleStore and VertexAiRagRetrieval away from vertexai.preview (\u003ca href=\"https://github.com/google/adk-python/commit/9e411be81c5ad9e28ea892362c2ec4f76982f680\"\u003e9e411be\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003epersist skill-script outputs as artifacts (\u003ca href=\"https://github.com/google/adk-python/commit/beaef0d807e6759489afd72995451486c0a4cca3\"\u003ebeaef0d\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/5579\"\u003e#5579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eplugins:\u003c/strong\u003e add on_schema_error and on_schema_ready callback hooks to BigQueryLoggerConfig (\u003ca href=\"https://github.com/google/adk-python/commit/4d31fa98b03efa2cabfaa05d20039e286db06f86\"\u003e4d31fa9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eplugins:\u003c/strong\u003e enrich AGENT_STARTING metadata in BigQueryAgentAnalyticsPlugin (\u003ca href=\"https://github.com/google/adk-python/commit/c32ad3bdb4b6f928d764999654ce012187a81faf\"\u003ec32ad3b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eprint next steps after adk create (\u003ca href=\"https://github.com/google/adk-python/commit/06b78477a5fab38c8a9094afa078c9bcf7ef9230\"\u003e06b7847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eresume Gemini generations paused with a continuation token (\u003ca href=\"https://github.com/google/adk-python/commit/b3cbb4727727f5bc60e0161e850ce6c105cca952\"\u003eb3cbb47\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eskills:\u003c/strong\u003e migrate GCPSkillRegistry.search_skills from GET to POST (\u003ca href=\"https://github.com/google/adk-python/commit/e9464ca8ece72fdedabd0ec3591ebbf8f8c0443d\"\u003ee9464ca\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esupport custom service accounts for agent engine deploy (\u003ca href=\"https://github.com/google/adk-python/commit/629e11996ebb544ea6b0f652e413955b2dfedeb6\"\u003e629e119\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/2951\"\u003e#2951\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etelemetry:\u003c/strong\u003e name skill tool spans after the skill they touch (\u003ca href=\"https://github.com/google/adk-python/commit/c11060cca66c880050091064fb1b8b12734e802f\"\u003ec11060c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e run a sync FunctionNode tool's callable on the tool thread pool (\u003ca href=\"https://github.com/google/adk-python/commit/71d5ed77382865c419a57692d68c296866efe2e5\"\u003e71d5ed7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e run non-live generator FunctionTools via FunctionNode (\u003ca href=\"https://github.com/google/adk-python/commit/0ee891a53b3c45908d3a6abcc44e165840159e5c\"\u003e0ee891a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e tag model_consult advisor requests with client label (\u003ca href=\"https://github.com/google/adk-python/commit/068610f272ecfe3d235ea5995e5168609d41d94b\"\u003e068610f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euser feedback survey workflow (\u003ca href=\"https://github.com/google/adk-python/commit/f5efa2a3a229a2bc85cf765fe859a61c030b6bf0\"\u003ef5efa2a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003evmaas:\u003c/strong\u003e add sandbox lifecycle helpers to the sandbox manager (\u003ca href=\"https://github.com/google/adk-python/commit/46dff4b904a387100c64760edf09bc69da8cbba2\"\u003e46dff4b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003evmaas:\u003c/strong\u003e find or create sandbox templates per container config (\u003ca href=\"https://github.com/google/adk-python/commit/650394f06817acf04a1ee7572da18c57d5d8abc5\"\u003e650394f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkflow:\u003c/strong\u003e run a sync generator FunctionNode's steps on the tool thread pool (\u003ca href=\"https://github.com/google/adk-python/commit/8112f4a885f441f1f4b32e5f7d33fb13a75188ae\"\u003e8112f4a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkflow:\u003c/strong\u003e support require_confirmation in \u003ccode\u003e@node\u003c/code\u003e and FunctionNode (\u003ca href=\"https://github.com/google/adk-python/commit/988fd1a73d174f9e3acb6d2e1bec102f9ec02238\"\u003e988fd1a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkflow:\u003c/strong\u003e support scalar auto-boxing for ToolNode input (\u003ca href=\"https://github.com/google/adk-python/commit/873eed5f102003c80368e19a3c46637d4075f04d\"\u003e873eed5\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/google/adk-python/blob/main/CHANGELOG.md\"\u003egoogle-adk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/google/adk-python/compare/v2.11.0...v2.12.0\"\u003e2.12.0\u003c/a\u003e (2026-10-13)\u003c/h2\u003e\n\u003ch3\u003eHighlights\u003c/h3\u003e\n\u003cp\u003eThis release enhances execution performance in long sessions while introducing finer control over tool execution, workflow approvals, and deployment security.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePerformance\u003c/strong\u003e: Cut time to first model request by 40% in long sessions. (\u003ca href=\"https://github.com/google/adk-python/commit/1754b3eeb6cdb2c16e3b30619a12066623df132e\"\u003e1754b3e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTools\u003c/strong\u003e: Intercept and filter tool outputs before returning them to the model using \u003ccode\u003eafter_tool_callback\u003c/code\u003e. (\u003ca href=\"https://github.com/google/adk-python/commit/fdda17cbcfec35a1cca1638b028c1af98e893eae\"\u003efdda17c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWorkflows\u003c/strong\u003e: Require human confirmation before executing workflow nodes via \u003ccode\u003erequire_confirmation\u003c/code\u003e. (\u003ca href=\"https://github.com/google/adk-python/commit/988fd1a73d174f9e3acb6d2e1bec102f9ec02238\"\u003e988fd1a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDeployment\u003c/strong\u003e: Deploy agents to Agent Engine using dedicated custom service accounts. (\u003ca href=\"https://github.com/google/adk-python/commit/629e11996ebb544ea6b0f652e413955b2dfedeb6\"\u003e629e119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePython 3.15\u003c/strong\u003e: Install and run ADK on Python 3.15. (\u003ca href=\"https://github.com/google/adk-python/commit/75aef1ec133c92c9e35f0575392ef5c4e3910b31\"\u003e75aef1e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd --state_file option to adk run (\u003ca href=\"https://github.com/google/adk-python/commit/c390266b51204a1bc59f6671d2674ba6ca1e79ad\"\u003ec390266\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/7083\"\u003e#7083\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd after_tool_callback to screen tool output (\u003ca href=\"https://github.com/google/adk-python/commit/fdda17cbcfec35a1cca1638b028c1af98e893eae\"\u003efdda17c\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/6966\"\u003e#6966\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd skill-level security support to AgentCardBuilder (\u003ca href=\"https://github.com/google/adk-python/commit/79a7e49cd656c1650945e87a955a096c06c09494\"\u003e79a7e49\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eagents:\u003c/strong\u003e adapt BaseNode in tool consumers and preserve ToolUnion compatibility (\u003ca href=\"https://github.com/google/adk-python/commit/8350c143da8837426f18ad75027984fdaacc856b\"\u003e8350c14\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eantigravity:\u003c/strong\u003e preserve model thinking parts, client tool responses, and sub-agent hierarchy in ADK events (\u003ca href=\"https://github.com/google/adk-python/commit/fac77be5d32cf8b07db0162fdd73f5f9155f60bf\"\u003efac77be\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecli:\u003c/strong\u003e source the agent builder assistant's ADK knowledge from the installed package (\u003ca href=\"https://github.com/google/adk-python/commit/ab9fffc9e000c2e5e417f5a66c14cb53250f1511\"\u003eab9fffc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003econtinue with de-identified text when only SDP matched (\u003ca href=\"https://github.com/google/adk-python/commit/315c3dd2cd2710b3ccc2fbb88c22125938d89adf\"\u003e315c3dd\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/7369\"\u003e#7369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eencrypt google credential in session (\u003ca href=\"https://github.com/google/adk-python/commit/42a17a9fd2f14d466f8903f2ba776c90e871455f\"\u003e42a17a9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eeval:\u003c/strong\u003e report the efficiency metrics for evals run from the Dev UI (\u003ca href=\"https://github.com/google/adk-python/commit/49bf291ce63c4756a45dce2f9070053e7ac212ff\"\u003e49bf291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003einstall lightweight Gemini Enterprise (Agent Platform) SDK without the GAPIC stack (\u003ca href=\"https://github.com/google/adk-python/commit/d92735dc71700905a4e72a8d2e5c5ae8ce054a04\"\u003ed92735d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elive:\u003c/strong\u003e add an internal model for Live background tool calls (\u003ca href=\"https://github.com/google/adk-python/commit/3f25ab50227104338f79df3bab6390b0f597e478\"\u003e3f25ab5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elive:\u003c/strong\u003e implement CascadeLive model \u0026amp; sample (\u003ca href=\"https://github.com/google/adk-python/commit/128faabb6dddacf26e029aa8c28c903c3a7a6b61\"\u003e128faab\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emigrate ADK to google-cloud-aiplatform v2.2 (agentplatform) (\u003ca href=\"https://github.com/google/adk-python/commit/77d4dcd0aa8c7ff841160f3c0db3754c347dfc1f\"\u003e77d4dcd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emigrate VertexAiExampleStore and VertexAiRagRetrieval away from vertexai.preview (\u003ca href=\"https://github.com/google/adk-python/commit/9e411be81c5ad9e28ea892362c2ec4f76982f680\"\u003e9e411be\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003epersist skill-script outputs as artifacts (\u003ca href=\"https://github.com/google/adk-python/commit/beaef0d807e6759489afd72995451486c0a4cca3\"\u003ebeaef0d\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/5579\"\u003e#5579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eplugins:\u003c/strong\u003e add on_schema_error and on_schema_ready callback hooks to BigQueryLoggerConfig (\u003ca href=\"https://github.com/google/adk-python/commit/4d31fa98b03efa2cabfaa05d20039e286db06f86\"\u003e4d31fa9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eplugins:\u003c/strong\u003e enrich AGENT_STARTING metadata in BigQueryAgentAnalyticsPlugin (\u003ca href=\"https://github.com/google/adk-python/commit/c32ad3bdb4b6f928d764999654ce012187a81faf\"\u003ec32ad3b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eprint next steps after adk create (\u003ca href=\"https://github.com/google/adk-python/commit/06b78477a5fab38c8a9094afa078c9bcf7ef9230\"\u003e06b7847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eresume Gemini generations paused with a continuation token (\u003ca href=\"https://github.com/google/adk-python/commit/b3cbb4727727f5bc60e0161e850ce6c105cca952\"\u003eb3cbb47\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eskills:\u003c/strong\u003e migrate GCPSkillRegistry.search_skills from GET to POST (\u003ca href=\"https://github.com/google/adk-python/commit/e9464ca8ece72fdedabd0ec3591ebbf8f8c0443d\"\u003ee9464ca\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esupport custom service accounts for agent engine deploy (\u003ca href=\"https://github.com/google/adk-python/commit/629e11996ebb544ea6b0f652e413955b2dfedeb6\"\u003e629e119\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/google/adk-python/issues/2951\"\u003e#2951\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etelemetry:\u003c/strong\u003e name skill tool spans after the skill they touch (\u003ca href=\"https://github.com/google/adk-python/commit/c11060cca66c880050091064fb1b8b12734e802f\"\u003ec11060c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e run a sync FunctionNode tool's callable on the tool thread pool (\u003ca href=\"https://github.com/google/adk-python/commit/71d5ed77382865c419a57692d68c296866efe2e5\"\u003e71d5ed7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e run non-live generator FunctionTools via FunctionNode (\u003ca href=\"https://github.com/google/adk-python/commit/0ee891a53b3c45908d3a6abcc44e165840159e5c\"\u003e0ee891a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e tag model_consult advisor requests with client label (\u003ca href=\"https://github.com/google/adk-python/commit/068610f272ecfe3d235ea5995e5168609d41d94b\"\u003e068610f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euser feedback survey workflow (\u003ca href=\"https://github.com/google/adk-python/commit/f5efa2a3a229a2bc85cf765fe859a61c030b6bf0\"\u003ef5efa2a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003evmaas:\u003c/strong\u003e add sandbox lifecycle helpers to the sandbox manager (\u003ca href=\"https://github.com/google/adk-python/commit/46dff4b904a387100c64760edf09bc69da8cbba2\"\u003e46dff4b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003evmaas:\u003c/strong\u003e find or create sandbox templates per container config (\u003ca href=\"https://github.com/google/adk-python/commit/650394f06817acf04a1ee7572da18c57d5d8abc5\"\u003e650394f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkflow:\u003c/strong\u003e run a sync generator FunctionNode's steps on the tool thread pool (\u003ca href=\"https://github.com/google/adk-python/commit/8112f4a885f441f1f4b32e5f7d33fb13a75188ae\"\u003e8112f4a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkflow:\u003c/strong\u003e support require_confirmation in \u003ccode\u003e@node\u003c/code\u003e and FunctionNode (\u003ca href=\"https://github.com/google/adk-python/commit/988fd1a73d174f9e3acb6d2e1bec102f9ec02238\"\u003e988fd1a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkflow:\u003c/strong\u003e support scalar auto-boxing for ToolNode input (\u003ca href=\"https://github.com/google/adk-python/commit/873eed5f102003c80368e19a3c46637d4075f04d\"\u003e873eed5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkflow:\u003c/strong\u003e support task sub-agent delegation and resume in task-mode wrapper (\u003ca href=\"https://github.com/google/adk-python/commit/8d716351ec9ec5fb7a51e4c62cac19458906560d\"\u003e8d71635\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/google/adk-python/commit/38381f65f2bee0f70a89f938ee64e51b34916fa7\"\u003e\u003ccode\u003e38381f6\u003c/code\u003e\u003c/a\u003e chore: update last-release-sha for next main release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/de153fb3f0c76e684786ddd06fc5027ee38d46f1\"\u003e\u003ccode\u003ede153fb\u003c/code\u003e\u003c/a\u003e chore(release/candidate): release 2.12.0 (\u003ca href=\"https://redirect.github.com/google/adk-python/issues/7522\"\u003e#7522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/cfc5854ef4bd77301d1219e29da5182d7bbffc42\"\u003e\u003ccode\u003ecfc5854\u003c/code\u003e\u003c/a\u003e chore: release as 2.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/e9b74d36140f2594b24c481fb7a3825b2cb01e96\"\u003e\u003ccode\u003ee9b74d3\u003c/code\u003e\u003c/a\u003e build: pin a pydantic with Python 3.15 wheels in constraints-3.15.txt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/c213adf02d491726037b9dcceecbc4106dbd2aa6\"\u003e\u003ccode\u003ec213adf\u003c/code\u003e\u003c/a\u003e fix: add namespaced mode for forwarded A2A session context_id\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/62745ccc62513514bc0f30f5cfdaf1c593d156ca\"\u003e\u003ccode\u003e62745cc\u003c/code\u003e\u003c/a\u003e fix: skip ignored params' annotations on the legacy declaration path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/a3443505203ecdcaa1141434ef0ecd0006b95f31\"\u003e\u003ccode\u003ea344350\u003c/code\u003e\u003c/a\u003e fix: cancel and await parallel tool tasks on BaseException and GeneratorExit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/8350c143da8837426f18ad75027984fdaacc856b\"\u003e\u003ccode\u003e8350c14\u003c/code\u003e\u003c/a\u003e feat(agents): adapt BaseNode in tool consumers and preserve ToolUnion compati...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/6a3828325b6f9feb429aa9e73e86837ad9acecdd\"\u003e\u003ccode\u003e6a38283\u003c/code\u003e\u003c/a\u003e fix: name the missing pandas package in VertexAiExampleStore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/google/adk-python/commit/f92d8a8f2280350d9ba13c787bac796001753bb7\"\u003e\u003ccode\u003ef92d8a8\u003c/code\u003e\u003c/a\u003e refactor: let the GenAI SDK resume paused Gemini generations\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/google/adk-python/compare/v2.11.0...v2.12.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `litellm` from 1.103.2 to 1.105.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/BerriAI/litellm/releases\"\u003elitellm's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.105.0\u003c/h2\u003e\n\u003ch2\u003eVerify Docker Image Signature\u003c/h2\u003e\n\u003cp\u003eAll LiteLLM Docker images are signed with \u003ca href=\"https://docs.sigstore.dev/cosign/overview/\"\u003ecosign\u003c/a\u003e. Every release is signed with the same key introduced in \u003ca href=\"https://github.com/BerriAI/litellm/commit/0112e53046018d726492c814b3644b7d376029d0\"\u003ecommit \u003ccode\u003e0112e53\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eVerify using the pinned commit hash (recommended):\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eA commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key:\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003ecosign verify \\\n  --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \\\n  ghcr.io/berriai/litellm:v1.105.0\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eVerify using the release tag (convenience):\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eTags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules:\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003ecosign verify \\\n  --key https://raw.githubusercontent.com/BerriAI/litellm/v1.105.0/cosign.pub \\\n  ghcr.io/berriai/litellm:v1.105.0\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eExpected output:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eThe following checks were performed on each of these signatures:\n  - The cosign claims were validated\n  - The signatures were verified against the specified public key\n\u003c/code\u003e\u003c/pre\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat(mcp): share compatibility-aware result conversion across tool surfaces by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43089\"\u003eBerriAI/litellm#43089\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(caching): propagate auth cache invalidation over Redis Cluster via a node-level pub/sub client by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43110\"\u003eBerriAI/litellm#43110\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(model-catalog): add Rust registry validation by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43136\"\u003eBerriAI/litellm#43136\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest(rust): reorganize core crate tests and split cache and OCR suites by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43177\"\u003eBerriAI/litellm#43177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(proxy): give SpendLogToolIndex its own share of the cleanup budget and log a per-run summary by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/41768\"\u003eBerriAI/litellm#41768\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(rust): hand upstream response headers to the native Messages stream by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43178\"\u003eBerriAI/litellm#43178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(testkit): agent clients for Claude Code, Codex and opencode by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43181\"\u003eBerriAI/litellm#43181\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: run migrated unit selections on every event in legacy GHA shards by \u003ca href=\"https://github.com/yuneng-berri\"\u003e\u003ccode\u003e@​yuneng-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43182\"\u003eBerriAI/litellm#43182\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: move tests/test_litellm root and small trees into tests/unit by \u003ca href=\"https://github.com/yuneng-berri\"\u003e\u003ccode\u003e@​yuneng-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43186\"\u003eBerriAI/litellm#43186\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(sso): gate /sso/debug routes behind ENABLE_SSO_DEBUG, off by default by \u003ca href=\"https://github.com/ojensen-berri\"\u003e\u003ccode\u003e@​ojensen-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43150\"\u003eBerriAI/litellm#43150\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor(framer): replace Framer trait with tokio-util codecs by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43193\"\u003eBerriAI/litellm#43193\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(anthropic): surface Responses bridge stream failures as Anthropic error events by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43126\"\u003eBerriAI/litellm#43126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: move tests/test_litellm/llms into tests/unit/llms by \u003ca href=\"https://github.com/yuneng-berri\"\u003e\u003ccode\u003e@​yuneng-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43191\"\u003eBerriAI/litellm#43191\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: move tests/test_litellm integrations and secret_managers into tests/unit by \u003ca href=\"https://github.com/yuneng-berri\"\u003e\u003ccode\u003e@​yuneng-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43194\"\u003eBerriAI/litellm#43194\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(mcp): configure protocol versions and capability discovery by \u003ca href=\"https://github.com/joshua-berri\"\u003e\u003ccode\u003e@​joshua-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/43169\"\u003eBerriAI/litellm#43169\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/BerriAI/litellm/commit/80b9556dd312d18c535ae06884faa97d1fdb8f46\"\u003e\u003ccode\u003e80b9556\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/45927\"\u003e#45927\u003c/a\u003e from BerriAI/litellm_ui_bundle_rc_1_105_0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/919f027a0ba0bb22e3cbeaae9b7c38efd002afdd\"\u003e\u003ccode\u003e919f027\u003c/code\u003e\u003c/a\u003e chore: update Next.js build artifacts (2026-10-11 06:00 UTC, node v24.19.0)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/f15af9b0594db44c5c371a3070cbc361f50af414\"\u003e\u003ccode\u003ef15af9b\u003c/code\u003e\u003c/a\u003e feat(ui): backport decision auto-router setup to 1.105 (\u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/45915\"\u003e#45915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/2616b1a3db7f1d6268f94704d7655fcd0dfee042\"\u003e\u003ccode\u003e2616b1a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/45905\"\u003e#45905\u003c/a\u003e from BerriAI/litellm_backport_decisions_rc_1_105_0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/fcbb02231b284ade286b47348efeb866f097c2df\"\u003e\u003ccode\u003efcbb022\u003c/code\u003e\u003c/a\u003e chore(backport): merge rc/1.105.0 and move supported_decisions_providers to l...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/23fec69be297bd68c43ecbb66f525b8c635d220e\"\u003e\u003ccode\u003e23fec69\u003c/code\u003e\u003c/a\u003e test(unit): flush queued logging tasks after each test so systemone callback ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/212b42e932cd3a025119b552ef33aad56b191ec9\"\u003e\u003ccode\u003e212b42e\u003c/code\u003e\u003c/a\u003e chore(backport): regenerate dashboard API types and adapt the picks to rc/1.1...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/f26cff4ce353e2a874976d85893e30aaac45ded8\"\u003e\u003ccode\u003ef26cff4\u003c/code\u003e\u003c/a\u003e feat(sdk): add litellm.systemone and trim litellm.decisions to the OpenAI sha...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/40323053177a3615d1c13071e4faa42224f48c5a\"\u003e\u003ccode\u003e4032305\u003c/code\u003e\u003c/a\u003e test(decisions): bill the OpenAI-format openrouter case from provider-reporte...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/8f262b2089c5bdd4f4e59af4b921c36af10b9135\"\u003e\u003ccode\u003e8f262b2\u003c/code\u003e\u003c/a\u003e docs(proxy): describe /v1/decisions and /v1/systemone in Swagger UI (\u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/45838\"\u003e#45838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/BerriAI/litellm/compare/v1.103.2...v1.105.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.5 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/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0 2026-10-08\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\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/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n","html_url":"https://github.com/Alberto-Codes/gepa-adk/pull/585","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alberto-Codes%2Fgepa-adk/issues/585","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/585/packages"}},{"old_version":"\u003e=2.13.5","new_version":"\u003e=2.14.1","update_type":"minor","path":null,"pr_created_at":"2026-10-20T21:43:21.000Z","version_change":"\u003e=2.13.5 → \u003e=2.14.1","issue":{"uuid":"5950141228","node_id":"PR_kwDOQtdXMM8AAAABJp6-dg","number":248,"state":"open","title":"build(deps): update pydantic requirement from \u003e=2.13.5 to \u003e=2.14.1","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":6,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-10-20T21:43:21.000Z","updated_at":"2026-10-23T16:24:14.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): update","packages":[{"name":"pydantic","old_version":"\u003e=2.13.5","new_version":"\u003e=2.14.1","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pydantic](https://github.com/pydantic/pydantic) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1 2026-10-11\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePerformance\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid Python tuple allocation during model fields validation 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/13955\"\u003e#13955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary extra dict allocation in model validation 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/13956\"\u003e#13956\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003earguments-v3\u003c/code\u003e schema with variadic keywords 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/13954\"\u003e#13954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0 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/13964\"\u003e#13964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13967\"\u003e#13967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator 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/13972\"\u003e#13972\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13973\"\u003e#13973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation 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/13978\"\u003e#13978\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.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic/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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003ev2.14.0 (2026-10-08)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.14.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eThe highlights of the v2.14 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-14-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release drops support for Python 3.9 and adds support for Python 3.15.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003emultiple_of\u003c/code\u003e constraint in \u003ccode\u003efraction\u003c/code\u003e and \u003ccode\u003etimedelta\u003c/code\u003e core schemas 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/13873\"\u003e#13873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e__namespace__\u003c/code\u003e parameter to \u003ccode\u003ecreate_model()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13895\"\u003e#13895\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an \u003ccode\u003eordered-dict\u003c/code\u003e core schema 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/13796\"\u003e#13796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ecounter\u003c/code\u003e core schema 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/13824\"\u003e#13824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDo not mutate \u003ccode\u003emodel_config\u003c/code\u003e attribute 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/13825\"\u003e#13825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject newlines in \u003ccode\u003eNameEmail\u003c/code\u003e validation 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/13897\"\u003e#13897\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCall enum constructors in both validation modes 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/13792\"\u003e#13792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix documentation examples not raising and remove unused \u003ccode\u003estring_sub_type\u003c/code\u003e unused error code 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/13821\"\u003e#13821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOverflowError\u003c/code\u003e during \u003ccode\u003eByteSize\u003c/code\u003e validation 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/13850\"\u003e#13850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire \u003ccode\u003emultiple_of\u003c/code\u003e constraints to be positive 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/13862\"\u003e#13862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlways pop field name and model type stacks during schema generation by \u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003eTypeError\u003c/code\u003e gracefully during docstring extraction 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/13874\"\u003e#13874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix config propagation of stdlib dataclasses and \u003ccode\u003eTypedDict\u003c/code\u003es in JSON Schema 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/13891\"\u003e#13891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't apply \u003ccode\u003eser_json_timedelta\u003c/code\u003e to all datetime types in serialization inference 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/13892\"\u003e#13892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEncode JSON Schema defaults with a consistent configuration 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/13893\"\u003e#13893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate \u003ccode\u003einit\u003c/code\u003e and \u003ccode\u003ekw_only=False\u003c/code\u003e from \u003ccode\u003eField()\u003c/code\u003e to stdlib dataclass fields 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/13898\"\u003e#13898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect propagated extra config in the JSON Schema of stdlib dataclasses 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/13899\"\u003e#13899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle OS errors during \u003ccode\u003eZoneInfo\u003c/code\u003e validation 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/13912\"\u003e#13912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle exceptions during \u003ccode\u003eDecimal\u003c/code\u003e validation 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/13940\"\u003e#13940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRebuild incomplete types during serialization inference 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/13922\"\u003e#13922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject large exponents in \u003ccode\u003eFraction\u003c/code\u003e validation 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/13944\"\u003e#13944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid validating URL prefix multiple times in multi host URLs 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/13945\"\u003e#13945\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Contributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saquibjawedbit\"\u003e\u003ccode\u003e@​saquibjawedbit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13859\"\u003e#13859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b2212c787fb5c73386dc770681ec49cd09da8e73\"\u003e\u003ccode\u003eb2212c7\u003c/code\u003e\u003c/a\u003e Prepare release v2.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/968fb2b6eed196a3f17ca9a3aa4697b518614531\"\u003e\u003ccode\u003e968fb2b\u003c/code\u003e\u003c/a\u003e Fix docs conversion table\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/6adc8b3f6146cabf290bdefd51c87486dd659091\"\u003e\u003ccode\u003e6adc8b3\u003c/code\u003e\u003c/a\u003e Support named tuples in \u003ccode\u003eSequence\u003c/code\u003e validation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7637fbc31c91f86870c3b34d220d5b7fd62c54db\"\u003e\u003ccode\u003e7637fbc\u003c/code\u003e\u003c/a\u003e Reject out-of-range int inputs for \u003ccode\u003etimedelta\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/dfdbfcb5fa6cf0ae291cb8aebc5bf2153670fe9c\"\u003e\u003ccode\u003edfdbfcb\u003c/code\u003e\u003c/a\u003e Enforce the \u003ccode\u003emax_digits\u003c/code\u003e whole-digits limit in the Python \u003ccode\u003eDecimal\u003c/code\u003e validator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/e2456d3161d0969b917fc769b2e06b7e076cb886\"\u003e\u003ccode\u003ee2456d3\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003eclosed\u003c/code\u003e and \u003ccode\u003eextra_items\u003c/code\u003e via inheritance in \u003ccode\u003eTypedDict\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/317655dfe022ebfc818c8e8e744b671fe53d8c3f\"\u003e\u003ccode\u003e317655d\u003c/code\u003e\u003c/a\u003e Harden CI security\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/3ba1dd48939542a04748a9bcfd3248496fa0bcc5\"\u003e\u003ccode\u003e3ba1dd4\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eTypeError\u003c/code\u003e on \u003ccode\u003eForwardRef\u003c/code\u003e on Python 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/43681abc488119808fcdae2f60cadd5520ceed26\"\u003e\u003ccode\u003e43681ab\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003esamuelcolvin/check-python-version\u003c/code\u003e action to v5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d6bc53a8559d93814009eb2043db133a90f7f921\"\u003e\u003ccode\u003ed6bc53a\u003c/code\u003e\u003c/a\u003e Avoid unnecessary extra dict allocation in model validation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.5...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n","html_url":"https://github.com/JasperDale420/Orion/pull/248","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/JasperDale420%2FOrion/issues/248","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/248/packages"}}]}