{"id":9388,"name":"chardet","ecosystem":"pip","repository_url":"https://github.com/chardet/chardet","issues_count":140,"created_at":"2025-06-06T22:34:31.454Z","updated_at":"2025-06-06T22:34:31.454Z","purl":"pkg:pypi/chardet","metadata":{"id":2668394,"name":"chardet","ecosystem":"pypi","description":"Universal encoding detector for Python 3","homepage":"https://github.com/chardet/chardet","licenses":"LGPL","normalized_licenses":["Other"],"repository_url":"https://github.com/chardet/chardet","keywords_array":["encoding","i18n","xml"],"namespace":null,"versions_count":15,"first_release_published_at":"2006-12-23T17:39:10.000Z","latest_release_published_at":"2023-08-01T19:23:00.000Z","latest_release_number":"5.2.0","last_synced_at":"2025-06-06T13:31:09.945Z","created_at":"2022-04-10T10:19:46.727Z","updated_at":"2025-06-06T13:31:09.945Z","registry_url":"https://pypi.org/project/chardet/","install_command":"pip install chardet --index-url https://pypi.org/simple","documentation_url":"https://chardet.readthedocs.io/","metadata":{"funding":null,"documentation":"https://chardet.readthedocs.io/","classifiers":["Development Status :: 5 - Production/Stable","Intended Audience :: Developers","License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)","Operating System :: OS Independent","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.7","Programming Language :: Python :: 3.8","Programming Language :: Python :: 3.9","Programming Language :: Python :: Implementation :: CPython","Programming Language :: Python :: Implementation :: PyPy","Topic :: Software Development :: Libraries :: Python Modules","Topic :: Text Processing :: Linguistic"],"normalized_name":"chardet"},"repo_metadata":{"id":39674468,"uuid":"5196969","full_name":"chardet/chardet","owner":"chardet","description":"Python character encoding detector","archived":false,"fork":false,"pushed_at":"2024-08-05T19:23:30.000Z","size":5087,"stargazers_count":2174,"open_issues_count":67,"forks_count":258,"subscribers_count":48,"default_branch":"main","last_synced_at":"2024-10-29T11:16:15.282Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chardet.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"docs/supported-encodings.rst","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-07-26T20:30:54.000Z","updated_at":"2024-10-29T03:12:09.000Z","dependencies_parsed_at":"2024-04-28T01:57:25.963Z","dependency_job_id":"a75c92eb-4a5a-43a2-8e95-e9d2d470ae22","html_url":"https://github.com/chardet/chardet","commit_stats":{"total_commits":319,"total_committers":52,"mean_commits":6.134615384615385,"dds":0.7021943573667712,"last_synced_commit":"0e9b7bc20366163efcc221281201baff4100fe19"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chardet","download_url":"https://codeload.github.com/chardet/chardet/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222062762,"owners_count":16924733,"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":"chardet","name":"Character Encoding Detector","uuid":"6211498","kind":"organization","description":null,"email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/6211498?v=4","repositories_count":2,"last_synced_at":"2024-03-25T19:58:26.758Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/chardet","funding_links":[],"total_stars":2056,"followers":8,"following":0,"created_at":"2022-11-02T16:22:49.182Z","updated_at":"2024-03-25T19:58:28.140Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chardet","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chardet/repositories"},"tags":[{"name":"5.2.0","sha":"78250d917a2883aa60215c04480aeb27a545f1d9","kind":"commit","published_at":"2023-08-01T19:12:12.000Z","download_url":"https://codeload.github.com/chardet/chardet/tar.gz/5.2.0","html_url":"https://github.com/chardet/chardet/releases/tag/5.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/5.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/5.2.0/manifests"},{"name":"5.1.0","sha":"8087f0015184cf9569d00970a2acf1e1d3e80feb","kind":"tag","published_at":"2022-12-01T22:36:36.000Z","download_url":"https://codeload.github.com/chardet/chardet/tar.gz/5.1.0","html_url":"https://github.com/chardet/chardet/releases/tag/5.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/5.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/5.1.0/manifests"},{"name":"5.0.0","sha":"ff5dcb25a59990e43683b8e9057f6f746bfb2658","kind":"commit","published_at":"2022-06-25T04:16:54.000Z","download_url":"https://codeload.github.com/chardet/chardet/tar.gz/5.0.0","html_url":"https://github.com/chardet/chardet/releases/tag/5.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/5.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/5.0.0/manifests"},{"name":"4.0.0","sha":"a808ed1c945293c0edeeda3a360abfa2a0b25a20","kind":"commit","published_at":"2020-12-10T18:52:41.000Z","download_url":"https://codeload.github.com/chardet/chardet/tar.gz/4.0.0","html_url":"https://github.com/chardet/chardet/releases/tag/4.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/4.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/4.0.0/manifests"},{"name":"3.0.4","sha":"9b8c5c2fb118d76c6beeab9affd01c332732a530","kind":"tag","published_at":"2017-06-08T14:29:42.000Z","download_url":"https://codeload.github.com/chardet/chardet/tar.gz/3.0.4","html_url":"https://github.com/chardet/chardet/releases/tag/3.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/3.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/3.0.4/manifests"},{"name":"3.0.3","sha":"7c9cf618f2e519cbcd9ab2de6918fa95a1253f6c","kind":"tag","published_at":"2017-05-16T18:40:37.000Z","download_url":"https://codeload.github.com/chardet/chardet/tar.gz/3.0.3","html_url":"https://github.com/chardet/chardet/releases/tag/3.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/3.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/3.0.3/manifests"},{"name":"3.0.2","sha":"c47f6d79845ec7fe9f3bfd2fc66d47812f571d12","kind":"commit","published_at":"2017-04-12T19:20:00.000Z","download_url":"https://codeload.github.com/chardet/chardet/tar.gz/3.0.2","html_url":"https://github.com/chardet/chardet/releases/tag/3.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/3.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/3.0.2/manifests"},{"name":"3.0.1","sha":"5d65f5a83b784f4330d087124d1e120e48e0c855","kind":"tag","published_at":"2017-04-11T20:47:39.000Z","download_url":"https://codeload.github.com/chardet/chardet/tar.gz/3.0.1","html_url":"https://github.com/chardet/chardet/releases/tag/3.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/3.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/3.0.1/manifests"},{"name":"3.0.0","sha":"bad771d7d0f9631fc47a0b1c09f7f6588b97d815","kind":"commit","published_at":"2017-04-11T17:49:07.000Z","download_url":"https://codeload.github.com/chardet/chardet/tar.gz/3.0.0","html_url":"https://github.com/chardet/chardet/releases/tag/3.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/3.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/3.0.0/manifests"},{"name":"2.3.0","sha":"5f2eff2fd66bf93cc7d17ceec0da5833d1da3e56","kind":"tag","published_at":"2014-10-07T15:03:16.000Z","download_url":"https://codeload.github.com/chardet/chardet/tar.gz/2.3.0","html_url":"https://github.com/chardet/chardet/releases/tag/2.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/2.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/2.3.0/manifests"},{"name":"2.2.1","sha":"063374a03c3f4ca64536b25679579c3a5ff2eb20","kind":"tag","published_at":"2013-12-18T13:54:41.000Z","download_url":"https://codeload.github.com/chardet/chardet/tar.gz/2.2.1","html_url":"https://github.com/chardet/chardet/releases/tag/2.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/2.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/2.2.1/manifests"},{"name":"2.2.0","sha":"fc5bd22ac02f2f0aed2d599951858a878d31d01e","kind":"tag","published_at":"2013-12-16T21:32:16.000Z","download_url":"https://codeload.github.com/chardet/chardet/tar.gz/2.2.0","html_url":"https://github.com/chardet/chardet/releases/tag/2.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/2.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/2.2.0/manifests"},{"name":"1.1","sha":"73ab96363edcad26a9f59e240c0c073a34ba4f88","kind":"commit","published_at":"2012-07-26T20:57:54.000Z","download_url":"https://codeload.github.com/chardet/chardet/tar.gz/1.1","html_url":"https://github.com/chardet/chardet/releases/tag/1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chardet%2Fchardet/tags/1.1/manifests"}]},"repo_metadata_updated_at":"2024-10-29T20:44:05.645Z","dependent_packages_count":1349,"downloads":97006342,"downloads_period":"last-month","dependent_repos_count":284023,"rankings":{"downloads":0.019258740258287218,"dependent_repos_count":0.0018341657388844972,"dependent_packages_count":0.017607991093291173,"stargazers_count":2.157529158649834,"forks_count":3.9562954987738603,"docker_downloads_count":0.002567832034438296,"average":1.0258488977580993},"purl":"pkg:pypi/chardet","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/chardet","docker_dependents_count":16939,"docker_downloads_count":7684156661,"usage_url":"https://repos.ecosyste.ms/usage/pypi/chardet","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/chardet/dependencies","status":null,"funding_links":[],"critical":true,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/chardet/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/chardet/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/chardet/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/chardet/related_packages","maintainers":[{"uuid":"ajung","login":"ajung","name":null,"email":null,"url":null,"packages_count":151,"html_url":"https://pypi.org/user/ajung/","role":null,"created_at":"2023-01-17T11:18:26.720Z","updated_at":"2023-01-17T11:18:26.720Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/ajung/packages"},{"uuid":"graffatcolmingov","login":"graffatcolmingov","name":null,"email":null,"url":null,"packages_count":55,"html_url":"https://pypi.org/user/graffatcolmingov/","role":null,"created_at":"2023-01-17T11:18:26.730Z","updated_at":"2023-01-17T11:18:26.730Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/graffatcolmingov/packages"},{"uuid":"erikrose","login":"erikrose","name":null,"email":null,"url":null,"packages_count":19,"html_url":"https://pypi.org/user/erikrose/","role":null,"created_at":"2023-01-17T11:18:26.727Z","updated_at":"2023-01-17T11:18:26.727Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/erikrose/packages"},{"uuid":"Daniel.Blanchard","login":"Daniel.Blanchard","name":null,"email":null,"url":null,"packages_count":10,"html_url":"https://pypi.org/user/Daniel.Blanchard/","role":null,"created_at":"2023-01-17T11:18:26.724Z","updated_at":"2023-01-17T11:18:26.724Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/Daniel.Blanchard/packages"},{"uuid":"MarkPilgrim","login":"MarkPilgrim","name":null,"email":null,"url":null,"packages_count":3,"html_url":"https://pypi.org/user/MarkPilgrim/","role":null,"created_at":"2023-01-17T11:18:26.733Z","updated_at":"2023-01-17T11:18:26.733Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/MarkPilgrim/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":690419,"maintainers_count":292811,"namespaces_count":0,"keywords_count":228590,"github":"pypi","metadata":{"funded_packages_count":48950},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2025-06-06T05:32:09.692Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/namespaces"}},"unique_repositories_count":94,"unique_repositories_count_past_30_days":5,"recent_issues":[{"uuid":"4606690973","node_id":"PR_kwDOSnHVas7jl5vr","number":5,"state":"open","title":"chore(deps): update chardet requirement from \u003e=5.2.0 to \u003e=7.4.3","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-07T08:31:19.000Z","updated_at":"2026-06-07T08:31:20.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"chardet","old_version":"\u003e=5.2.0","new_version":"\u003e=7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [chardet](https://github.com/chardet/chardet) 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/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore 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/iando0911/traffic-data-pipeline/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/iando0911%2Ftraffic-data-pipeline/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"},{"uuid":"4497706092","node_id":"PR_kwDOMoSnVc7eGHAt","number":463,"state":"closed","title":"Bump the uv-batch group across 1 directory with 28 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-22T21:55:48.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-21T20:30:32.000Z","updated_at":"2026-05-22T21:55:50.000Z","time_to_close":91516,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"uv-batch","update_count":28,"packages":[{"name":"requests","old_version":"2.32.5","new_version":"2.33.1","repository_url":"https://github.com/psf/requests"},{"name":"chardet","old_version":"5.2.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"psutil","old_version":"7.1.3","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"rapidfuzz","old_version":"3.10.1","new_version":"3.14.5","repository_url":"https://github.com/rapidfuzz/RapidFuzz"},{"name":"websockets","old_version":"15.0.1","new_version":"16.0","repository_url":"https://github.com/python-websockets/websockets"},{"name":"regex","old_version":"2025.10.23","new_version":"2026.4.4","repository_url":"https://github.com/mrabarnett/mrab-regex"},{"name":"opencv-python","old_version":"4.12.0.88","new_version":"4.13.0.92","repository_url":"https://github.com/opencv/opencv-python"},{"name":"oneocr","old_version":"1.0.10","new_version":"1.0.12","repository_url":"https://github.com/AuroraWright/oneocr"},{"name":"groq","old_version":"0.33.0","new_version":"1.2.0","repository_url":"https://github.com/groq/groq-python"},{"name":"torchcodec","old_version":"0.8.1","new_version":"0.11.1","repository_url":"https://github.com/pytorch/torchcodec"},{"name":"torchaudio","old_version":"2.8.0","new_version":"2.11.0","repository_url":"https://github.com/pytorch/audio"},{"name":"torch","old_version":"2.8.0","new_version":"2.11.0","repository_url":"https://github.com/pytorch/pytorch"},{"name":"pillow","old_version":"12.0.0","new_version":"12.2.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"openai","old_version":"2.6.1","new_version":"2.32.0","repository_url":"https://github.com/openai/openai-python"},{"name":"jaconv","old_version":"0.4.1","new_version":"0.5.0","repository_url":"https://github.com/ikegami-yukino/jaconv"},{"name":"pyobjc","old_version":"10.3.2","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"pyqt6","old_version":"6.10.2","new_version":"6.11.0"},{"name":"tokenizers","old_version":"0.22.1","new_version":"0.22.2","repository_url":"https://github.com/huggingface/tokenizers"},{"name":"curl-cffi","old_version":"0.13.0","new_version":"0.15.0","repository_url":"https://github.com/lexiforest/curl_cffi"},{"name":"py7zr","old_version":"1.0.0","new_version":"1.1.0","repository_url":"https://github.com/miurahr/py7zr"},{"name":"uv","old_version":"0.9.30","new_version":"0.11.7","repository_url":"https://github.com/astral-sh/uv"},{"name":"pip","old_version":"25.3","new_version":"26.0.1","repository_url":"https://github.com/pypa/pip"},{"name":"onnxruntime","old_version":"1.23.2","new_version":"1.24.3","repository_url":"https://github.com/microsoft/onnxruntime"},{"name":"google-genai","old_version":"1.70.0","new_version":"1.73.1","repository_url":"https://github.com/googleapis/python-genai"},{"name":"pytest","old_version":"9.0.2","new_version":"9.0.3","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"hypothesis","old_version":"6.151.11","new_version":"6.152.1","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ruff","old_version":"0.15.9","new_version":"0.15.11","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv-batch group with 27 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.1` |\n| [chardet](https://github.com/chardet/chardet) | `5.2.0` | `7.4.3` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.1.3` | `7.2.2` |\n| [rapidfuzz](https://github.com/rapidfuzz/RapidFuzz) | `3.10.1` | `3.14.5` |\n| [websockets](https://github.com/python-websockets/websockets) | `15.0.1` | `16.0` |\n| [regex](https://github.com/mrabarnett/mrab-regex) | `2025.10.23` | `2026.4.4` |\n| [opencv-python](https://github.com/opencv/opencv-python) | `4.12.0.88` | `4.13.0.92` |\n| [oneocr](https://github.com/AuroraWright/oneocr) | `1.0.10` | `1.0.12` |\n| [groq](https://github.com/groq/groq-python) | `0.33.0` | `1.2.0` |\n| [torchcodec](https://github.com/pytorch/torchcodec) | `0.8.1` | `0.11.1` |\n| [torchaudio](https://github.com/pytorch/audio) | `2.8.0` | `2.11.0` |\n| [torch](https://github.com/pytorch/pytorch) | `2.8.0` | `2.11.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.0.0` | `12.2.0` |\n| [openai](https://github.com/openai/openai-python) | `2.6.1` | `2.32.0` |\n| [jaconv](https://github.com/ikegami-yukino/jaconv) | `0.4.1` | `0.5.0` |\n| [pyobjc](https://github.com/ronaldoussoren/pyobjc) | `10.3.2` | `12.1` |\n| [pyqt6](https://www.riverbankcomputing.com/software/pyqt/) | `6.10.2` | `6.11.0` |\n| [tokenizers](https://github.com/huggingface/tokenizers) | `0.22.1` | `0.22.2` |\n| [curl-cffi](https://github.com/lexiforest/curl_cffi) | `0.13.0` | `0.15.0` |\n| [py7zr](https://github.com/miurahr/py7zr) | `1.0.0` | `1.1.0` |\n| [uv](https://github.com/astral-sh/uv) | `0.9.30` | `0.11.7` |\n| [pip](https://github.com/pypa/pip) | `25.3` | `26.0.1` |\n| [onnxruntime](https://github.com/microsoft/onnxruntime) | `1.23.2` | `1.24.3` |\n| [google-genai](https://github.com/googleapis/python-genai) | `1.70.0` | `1.73.1` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.2` | `9.0.3` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.151.11` | `6.152.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.9` | `0.15.11` |\n\n\nUpdates `requests` from 2.32.5 to 2.33.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.33.1\u003c/h2\u003e\n\u003ch2\u003e2.33.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\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/ferdnyc\"\u003e\u003ccode\u003e@​ferdnyc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7277\"\u003epsf/requests#7277\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2331-2026-03-30\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2331-2026-03-30\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.33.0\u003c/h2\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that uses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report any gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts contents to a non-deterministic location to prevent malicious file replacement. This does not affect default usage of Requests, only applications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause malformed authentication to be applied to Requests on Python 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/M0d3v1\"\u003e\u003ccode\u003e@​M0d3v1\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6865\"\u003epsf/requests#6865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aminvakil\"\u003e\u003ccode\u003e@​aminvakil\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7220\"\u003epsf/requests#7220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/E8Price\"\u003e\u003ccode\u003e@​E8Price\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6960\"\u003epsf/requests#6960\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7244\"\u003epsf/requests#7244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/magsen\"\u003e\u003ccode\u003e@​magsen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6553\"\u003epsf/requests#6553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Rohan5commit\"\u003e\u003ccode\u003e@​Rohan5commit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7227\"\u003epsf/requests#7227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.33.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that\nuses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report\nany gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts\ncontents to a non-deterministic location to prevent malicious file\nreplacement. This does not affect default usage of Requests, only\napplications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause\nmalformed authentication to be applied to Requests on\nPython 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/111d2b77790bf49943c0dfa09b365371c24aec7e\"\u003e\u003ccode\u003e111d2b7\u003c/code\u003e\u003c/a\u003e v2.33.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/f0198e6dfc431a2293dc16e1b1e8fcddc910a7f3\"\u003e\u003ccode\u003ef0198e6\u003c/code\u003e\u003c/a\u003e Fix malformed value parsing for Content-Type (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc7dd0fc4d56e808bcdd85ac2d797b3107c89259\"\u003e\u003ccode\u003ebc7dd0f\u003c/code\u003e\u003c/a\u003e Fix cosmetic header validity parsing regex (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4443b1a847b190010c2972a658924b98b5db6360\"\u003e\u003ccode\u003e4443b1a\u003c/code\u003e\u003c/a\u003e Fix unintended test extra (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7306\"\u003e#7306\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/389eea58dfb2f2ee096421a812e3af29c0298951\"\u003e\u003ccode\u003e389eea5\u003c/code\u003e\u003c/a\u003e Cleanup extracted file after extract_zipped_path test (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7407309c8a8a73aa2f4337184025d440bbedab7a\"\u003e\u003ccode\u003e7407309\u003c/code\u003e\u003c/a\u003e Packaging: DRY out extras definition (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7277\"\u003e#7277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc04dfd6dad4cb02cd92f5daa81eb562d280a761\"\u003e\u003ccode\u003ebc04dfd\u003c/code\u003e\u003c/a\u003e v2.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/66d21cb07bd6255b1280291c4fafb71803cdb3b7\"\u003e\u003ccode\u003e66d21cb\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/8b9bc8fc0f63be84602387913c4b689f19efd028\"\u003e\u003ccode\u003e8b9bc8f\u003c/code\u003e\u003c/a\u003e Move badges to top of README (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7293\"\u003e#7293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e331a288f369973f5de0ec8901c94cae4fa87286\"\u003e\u003ccode\u003ee331a28\u003c/code\u003e\u003c/a\u003e Remove unused extraction call (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7292\"\u003e#7292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.33.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `chardet` from 5.2.0 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.1.3 to 7.2.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/giampaolo/psutil/blob/master/docs/changelog.rst\"\u003epsutil's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e7.2.2 — 2026-01-28\n^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eEnhancements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2705\u003c/code\u003e: [Linux]: :meth:\u003ccode\u003eProcess.wait\u003c/code\u003e now uses \u003ccode\u003epidfd_open()\u003c/code\u003e +\n\u003ccode\u003epoll()\u003c/code\u003e (no busy loop). Requires Linux \u0026gt;= 5.3 and Python \u0026gt;= 3.9.\u003c/li\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2705\u003c/code\u003e: [macOS], [BSD]: :meth:\u003ccode\u003eProcess.wait\u003c/code\u003e now uses \u003ccode\u003ekqueue()\u003c/code\u003e (no\nbusy loop).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2701\u003c/code\u003e, [macOS]: fix compilation error on macOS \u0026lt; 10.7. (patch by\n:user:\u003ccode\u003eSergey Fedorov \u0026lt;barracuda156\u0026gt;\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2707\u003c/code\u003e, [macOS]: fix potential memory leaks in error paths of\n:meth:\u003ccode\u003eProcess.memory_full_info\u003c/code\u003e and :meth:\u003ccode\u003eProcess.threads\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2708\u003c/code\u003e, [macOS]: :meth:\u003ccode\u003eProcess.cmdline\u003c/code\u003e and :meth:\u003ccode\u003eProcess.environ\u003c/code\u003e may\nfail with \u003ccode\u003eOSError: [Errno 0] Undefined error\u003c/code\u003e (from\n\u003ccode\u003esysctl(KERN_PROCARGS2)\u003c/code\u003e). They now raise :exc:\u003ccode\u003eAccessDenied\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e7.2.1 — 2025-12-29\n^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2699\u003c/code\u003e, [FreeBSD], [NetBSD]: :func:\u003ccode\u003eheap_info\u003c/code\u003e does not detect small\nallocations (\u0026lt;= 1K). In order to fix that, we now flush internal jemalloc\ncache before fetching the metrics.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e7.2.0 — 2025-12-23\n^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eEnhancements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:gh:\u003ccode\u003e1275\u003c/code\u003e: new :func:\u003ccode\u003eheap_info\u003c/code\u003e and :func:\u003ccode\u003eheap_trim\u003c/code\u003e functions, providing\ndirect access to the platform's native C :term:\u003ccode\u003eheap\u003c/code\u003e allocator (glibc,\nmimalloc, libmalloc). Useful to create tools to detect memory leaks.\u003c/li\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2403\u003c/code\u003e, [Linux]: publish wheels for Linux musl.\u003c/li\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2680\u003c/code\u003e: unit tests are no longer installed / part of the distribution.\nThey now live under \u003ccode\u003etests/\u003c/code\u003e instead of \u003ccode\u003epsutil/tests\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2684\u003c/code\u003e, [FreeBSD], [critical]: compilation fails on FreeBSD 14 due to\nmissing include.\u003c/li\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2691\u003c/code\u003e, [Windows]: fix memory leak in :func:\u003ccode\u003enet_if_stats\u003c/code\u003e due to missing\n\u003ccode\u003ePy_CLEAR\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eCompatibility notes\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/giampaolo/psutil/commit/9eea97dd6f1d16ea33f5144c8925f1ce7a0688e1\"\u003e\u003ccode\u003e9eea97d\u003c/code\u003e\u003c/a\u003e Pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/938ac647418f09e4e610b2c755741316713c5592\"\u003e\u003ccode\u003e938ac64\u003c/code\u003e\u003c/a\u003e Rm sphinxcontrib.googleanalytics; override layout.html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/9dcbb7e60e650f0ab0cb52154b0a12c70f6a1e4c\"\u003e\u003ccode\u003e9dcbb7e\u003c/code\u003e\u003c/a\u003e Add sphinxcontrib-googleanalytics to requirements.txt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/76eaf9ae0f2868569c14b46f4165310885a40a15\"\u003e\u003ccode\u003e76eaf9a\u003c/code\u003e\u003c/a\u003e Try to add google analytics to doc\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/de1cafa56f54e97ca557993155e76dd98877e136\"\u003e\u003ccode\u003ede1cafa\u003c/code\u003e\u003c/a\u003e Update doc mentioning Process.wait() internal details\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/bb30943b0336a16f28437ec549c15a8ad2830cca\"\u003e\u003ccode\u003ebb30943\u003c/code\u003e\u003c/a\u003e Refact can_use_pidfd_open() and can_use_kqueue()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/a571717d6520d436273c8cb34ca871db4bfa508a\"\u003e\u003ccode\u003ea571717\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/giampaolo/psutil/issues/2708\"\u003e#2708\u003c/a\u003e, macos / cmdline / environ; raise AD instead of OSError(0) (\u003ca href=\"https://redirect.github.com/giampaolo/psutil/issues/2709\"\u003e#2709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/8b98c3effc20dcc4ed08c8f3d33e11ec0f5445b1\"\u003e\u003ccode\u003e8b98c3e\u003c/code\u003e\u003c/a\u003e Pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/700b7e6a4171ae7c775679217205f1d97568ae00\"\u003e\u003ccode\u003e700b7e6\u003c/code\u003e\u003c/a\u003e [macOS] fix potential leaks in error paths (\u003ca href=\"https://redirect.github.com/giampaolo/psutil/issues/2707\"\u003e#2707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/7cc7923a1479fb1d32bb25d3e78b465e2695fbf7\"\u003e\u003ccode\u003e7cc7923\u003c/code\u003e\u003c/a\u003e Windows / cmdline(): be more defensive in free()ing in case of error\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/giampaolo/psutil/compare/v7.1.3...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `rapidfuzz` from 3.10.1 to 3.14.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/rapidfuzz/RapidFuzz/releases\"\u003erapidfuzz's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 3.14.5\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix release ci attempting to upload a pyodide wheel\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.14.4\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd risc64 wheels\u003c/li\u003e\n\u003cli\u003eadd support for taskflow 4.0.0\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eupgrade to \u003ccode\u003eCython==3.2.4\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix type hints for extractOne when no score_cutoff is provided\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.14.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd missing pypy and freethreaded linux wheels\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edrop s390x and ppc64le wheels since they are virtually unused and require extremely long to build under emulation\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.14.2\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eupgrade to \u003ccode\u003eCython==3.1.6\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eenable free threading\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.14.1\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFully disable line tracing in release builds\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.14.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eupgrade to \u003ccode\u003eCython==3.1.3\u003c/code\u003e. This enables compilation with free threaded python.\u003c/li\u003e\n\u003cli\u003eupgrade to \u003ccode\u003erapidfuzz-cpp==3.3\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd support for freethreaded Python\u003c/li\u003e\n\u003cli\u003eadd python 3.14 wheels\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edropped support for Python3.9\u003c/li\u003e\n\u003cli\u003edrop 32 bit linux wheels\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eremove unused hook-dirs from pyinstaller config to fix a warning\u003c/li\u003e\n\u003cli\u003efixed WRatio for a length ratio of exactly 8.0\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.13.0\u003c/h2\u003e\n\u003ch2\u003eAdded\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/rapidfuzz/RapidFuzz/blob/main/CHANGELOG.rst\"\u003erapidfuzz's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cp\u003e[3.14.5] - 2026-08-07\n^^^^^^^^^^^^^^^^^^^^^\nFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e* fix release ci attempting to upload a pyodide wheel\n\u003cp\u003e[3.14.4] - 2026-04-06\n^^^^^^^^^^^^^^^^^^^^^\nAdded\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eadd risc64 wheels\u003c/li\u003e\n\u003cli\u003eadd support for taskflow 4.0.0\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e* upgrade to ``Cython==3.2.4``.\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e* fix type hints for extractOne when no score_cutoff is provided\n\n[3.14.3] - 2025-11-01\n^^^^^^^^^^^^^^^^^^^^^\nFixed\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eadd missing pypy and freethreaded linux wheels\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edrop s390x and ppc64le wheels since they are virtually unused and require extremly long to build under emulation\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e[3.14.2] - 2025-10-30\n^^^^^^^^^^^^^^^^^^^^^\nChanged\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e* upgrade to ``Cython==3.1.6``\n* enable free threading\n\u003cp\u003e[3.14.1] - 2025-09-08\n^^^^^^^^^^^^^^^^^^^^^\nFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e* Fully disable line tracing in release builds\n\n[3.14.0] - 2025-08-27\n^^^^^^^^^^^^^^^^^^^^^\nChanged\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/edf9f3c2d016c878dae1511301f8b4a501bba871\u0026quot;\u0026gt;\u0026lt;code\u0026gt;edf9f3c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; fix release ci\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/3d8470bf60062dda5c200517f61a8ff43e3e9ef2\u0026quot;\u0026gt;\u0026lt;code\u0026gt;3d8470b\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; enable verbose publish\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/7fd4ee202b5e3cc9f158f505a33d934a68c14148\u0026quot;\u0026gt;\u0026lt;code\u0026gt;7fd4ee2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Bump the github-actions group across 1 directory with 3 updates\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/9691cf1bf985eaf59f6c968f3d7cd8e59054ebaa\u0026quot;\u0026gt;\u0026lt;code\u0026gt;9691cf1\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; tag release\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/fd16748843be7d1a4842604fa3429e3943e80e5c\u0026quot;\u0026gt;\u0026lt;code\u0026gt;fd16748\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; ci: switch riscv64 from QEMU to native RISE runner\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/7f7d58b91a2716eaaec939a72b476ab1bf1ead1b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;7f7d58b\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; ci: add riscv64 wheel builds via QEMU\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/f4b56942bdbbb99bba556656ea8a0aef1e8c12f0\u0026quot;\u0026gt;\u0026lt;code\u0026gt;f4b5694\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Bump pypa/cibuildwheel from 3.3.1 to 3.4.0 in the github-actions group\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/f2873ce9868285eca1d05d8645791d76a2b545fe\u0026quot;\u0026gt;\u0026lt;code\u0026gt;f2873ce\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Bump the github-actions group across 1 directory with 3 updates\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/4e48509d858454ea994521f90ae8c5d66eb15073\u0026quot;\u0026gt;\u0026lt;code\u0026gt;4e48509\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; support Taskflow 4.0.0\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/70480396a66fadabd897407ce289978dec2c13c0\u0026quot;\u0026gt;\u0026lt;code\u0026gt;7048039\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Bump the github-actions group across 1 directory with 4 updates\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/compare/v3.10.1...v3.14.5\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `websockets` from 15.0.1 to 16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-websockets/websockets/releases\"\u003ewebsockets's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e16.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://websockets.readthedocs.io/en/stable/project/changelog.html\"\u003ehttps://websockets.readthedocs.io/en/stable/project/changelog.html\u003c/a\u003e for details.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/d4303a5d3e373fc8c34177c3dec1a9c75c8865fa\"\u003e\u003ccode\u003ed4303a5\u003c/code\u003e\u003c/a\u003e Release version 16.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/851bcd756bf114e41438f04d928aa85838724fe1\"\u003e\u003ccode\u003e851bcd7\u003c/code\u003e\u003c/a\u003e Bump pypa/cibuildwheel from 3.3.0 to 3.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/740c8d373e10ced940fb33c3e0457991841c10c4\"\u003e\u003ccode\u003e740c8d3\u003c/code\u003e\u003c/a\u003e Temporarily remove the trio implementation.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/92ea0553587ba07a4668c30dfd9e6210d9f26bc9\"\u003e\u003ccode\u003e92ea055\u003c/code\u003e\u003c/a\u003e Add missing changelog entry.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/ba74244154df5a74f044d0f8cd971acac636bb74\"\u003e\u003ccode\u003eba74244\u003c/code\u003e\u003c/a\u003e Document bug fix.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/9410483c016463a6cd08b2a5321337b85e094f10\"\u003e\u003ccode\u003e9410483\u003c/code\u003e\u003c/a\u003e Pin sphinx to avoid error in sphinxcontrib-trio.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/8e4d408e17b0bfa1a91aa62e054b8786a8132231\"\u003e\u003ccode\u003e8e4d408\u003c/code\u003e\u003c/a\u003e Document asyncio's TLS read buffer.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/cb3500b0b030715dc3caa1e3ce95affe4a79b8bd\"\u003e\u003ccode\u003ecb3500b\u003c/code\u003e\u003c/a\u003e Stop referring to the asyncio implementation as new.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/6563a9c884d92df4c889bb174dc84a56a7377686\"\u003e\u003ccode\u003e6563a9c\u003c/code\u003e\u003c/a\u003e The threading implementation supports max_queue.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/9f17e92dbee2b9a14e02b2792cfbb127efbd4098\"\u003e\u003ccode\u003e9f17e92\u003c/code\u003e\u003c/a\u003e Clarify that protocol_mutex protects pending_pings.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-websockets/websockets/compare/15.0.1...16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `regex` from 2025.10.23 to 2026.4.4\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.5.9\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eReverse matching with full unicode casefolding could lead to out-of-range string indexes.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.4.4\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eA fix for older Python versions before free-threading was  supported.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.4.3\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eMore fixes for free-threading.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.3.32\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eFixed segfault.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.3.31\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eFixed bug again.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.3.30\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eFixed bug.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.3.28\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eFixed version.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.3.27\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eVarious fixes, including ones to improve free-threading support.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.2.28\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eReplaced atomic operations with mutex on pattern object for free-threaded Python.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.2.26\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ePR [#598](https://github.com/mrabarnett/mrab-regex/issues/598): Fix race condition in storage caching with atomic operations.\n\u003cp\u003eReplaced use of PyUnicode_GET_LENGTH with PyUnicode_GetLength.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eVersion: 2026.2.19\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eAdded \\z as alias of \\Z, like in re module.\n\u003cp\u003eAdded prefixmatch as alias of match, like in re module.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eVersion: 2026.1.15\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/bc57b04b00de68590345ac2eb621b9a8dd222d7d\"\u003e\u003ccode\u003ebc57b04\u003c/code\u003e\u003c/a\u003e A fix for older Python versions before free-threading was  supported.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/773e213b5d7a78806e795d2513a37345dc793e97\"\u003e\u003ccode\u003e773e213\u003c/code\u003e\u003c/a\u003e More fixes for free-threading.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/5d51c75da03116e08bb6fb537fae6d8c804cc92c\"\u003e\u003ccode\u003e5d51c75\u003c/code\u003e\u003c/a\u003e Fixed segfault.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/2aff2db5542ec5b58705be6ddb7b69a99d3e38a8\"\u003e\u003ccode\u003e2aff2db\u003c/code\u003e\u003c/a\u003e Fixed bug again.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/16af8aed2b3211e90588d2ac96f7c588ed477b2c\"\u003e\u003ccode\u003e16af8ae\u003c/code\u003e\u003c/a\u003e Fixed bug.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/2356563bbfd51b3986320a866c35a50b89833949\"\u003e\u003ccode\u003e2356563\u003c/code\u003e\u003c/a\u003e Fixed bug.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/f579e8ff60e2993a11cf4fd96748e4b7866c9fed\"\u003e\u003ccode\u003ef579e8f\u003c/code\u003e\u003c/a\u003e Fixed version.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/55315a0497722898bed8286a596a64db698f498e\"\u003e\u003ccode\u003e55315a0\u003c/code\u003e\u003c/a\u003e Fixed version.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/923d78e39b8ff92db67606be3bfbc2e595b6475a\"\u003e\u003ccode\u003e923d78e\u003c/code\u003e\u003c/a\u003e Various fixes, including ones to improve free-threading support.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/df2d5ac9983af6febc0c2f32aff396a06142f8cb\"\u003e\u003ccode\u003edf2d5ac\u003c/code\u003e\u003c/a\u003e Replaced atomic operations with mutex on pattern object for free-threaded Pyt...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mrabarnett/mrab-regex/compare/2025.10.23...2026.4.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opencv-python` from 4.12.0.88 to 4.13.0.92\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/opencv/opencv-python/releases\"\u003eopencv-python's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0.92\u003c/h2\u003e\n\u003cp\u003eFollow up release for 4.13.0 with X server dependency fix. See \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/28438\"\u003e#28438\u003c/a\u003e for details.\u003c/p\u003e\n\u003ch2\u003e4.13.0.90\u003c/h2\u003e\n\u003cp\u003eComplete OpenCV 4.13.0 changelog: \u003ca href=\"https://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4130\"\u003ehttps://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4130\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ePython specific:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eManylinux 2_28 support, Numpy 2.4 support, Python 3.14 support\u003c/li\u003e\n\u003cli\u003eTuned Python bindings for logging \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27812\"\u003e#27812\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMarked Feature2D.detectAndCompute mask as optional in Python type stubs \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27544\"\u003e#27544\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMarked distCoeffs/R/D as optional in calib3d functions \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27564\"\u003e#27564\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded DLPACK support \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27581\"\u003e#27581\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27861\"\u003e#27861\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed memory leaks in pybindings \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27738\"\u003e#27738\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd PathLike type hints for args annotated with CV_WRAP_FILE_PATH \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27767\"\u003e#27767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed memory leak in pyopencv_to for path-like objects \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/28047\"\u003e#28047\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTunned Python bindings: use export_name as resolved typename for AliasTypeNode \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27997\"\u003e#27997\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003epython: fix pytest-cov false warnings by using compile() with full file path in exec_file_wrapper \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/28093\"\u003e#28093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed python scalar typing issues \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27620\"\u003e#27620\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed bug in ifdef state machine in header parser for bindings \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27393\"\u003e#27393\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWrap GridType field in cv::findCirclesGrid parameters structure \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27689\"\u003e#27689\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/opencv/opencv-python/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `oneocr` from 1.0.10 to 1.0.12\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/AuroraWright/oneocr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `groq` from 0.33.0 to 1.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/groq/groq-python/releases\"\u003egroq's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.0\u003c/h2\u003e\n\u003ch2\u003e1.2.0 (2026-04-18)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/groq/groq-python/compare/v1.1.2...v1.2.0\"\u003ev1.1.2...v1.2.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e implement indices array format for query and form serialization (\u003ca href=\"https://github.com/groq/groq-python/commit/80ca9750622cdd94562c34de4ef69326fdb78dd7\"\u003e80ca975\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e preserve hardcoded query params when merging with user params (\u003ca href=\"https://github.com/groq/groq-python/commit/ff12a2087a814e0baf815d0ee89dd73f18e13bae\"\u003eff12a20\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eensure file data are only sent as 1 parameter (\u003ca href=\"https://github.com/groq/groq-python/commit/f67099c22321d15021f283526c9cb85a58d98a8f\"\u003ef67099c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e optimize file structure copying in multipart requests (\u003ca href=\"https://github.com/groq/groq-python/commit/22d711f2bc262fe3bf8633d1a6c087f43c852c7d\"\u003e22d711f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.20.1 (\u003ca href=\"https://github.com/groq/groq-python/commit/f031213b83b91aba73d67806d4a85c3b71351582\"\u003ef031213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.20.2 (\u003ca href=\"https://github.com/groq/groq-python/commit/66e56a7ea574ce79d17c8bc0c2d02d1d2f23608c\"\u003e66e56a7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.22.1 (\u003ca href=\"https://github.com/groq/groq-python/commit/65e653508867f1c7cba8f83d4c56083577718bbe\"\u003e65e6535\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eimprove examples (\u003ca href=\"https://github.com/groq/groq-python/commit/9b75c4cb0c78c759df1ee4fbd0751ecf09328745\"\u003e9b75c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.1.2\u003c/h2\u003e\n\u003ch2\u003e1.1.2 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/groq/groq-python/compare/v1.1.1...v1.1.2\"\u003ev1.1.1...v1.1.2\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e bump minimum typing-extensions version (\u003ca href=\"https://github.com/groq/groq-python/commit/3ef90d5a347a277257127abcba3f457ca35d5485\"\u003e3ef90d5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003epydantic:\u003c/strong\u003e do not pass \u003ccode\u003eby_alias\u003c/code\u003e unless set (\u003ca href=\"https://github.com/groq/groq-python/commit/f84dd8ce6be887992445f10af1aac8102b2c6423\"\u003ef84dd8c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esanitize endpoint path params (\u003ca href=\"https://github.com/groq/groq-python/commit/4e57480cbe6e7d85353d04c49f931a300ff50436\"\u003e4e57480\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eci:\u003c/strong\u003e skip lint on metadata-only changes (\u003ca href=\"https://github.com/groq/groq-python/commit/e34867c6f89e39d61fb18fd7710222dd8740bac6\"\u003ee34867c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e tweak CI branches (\u003ca href=\"https://github.com/groq/groq-python/commit/5ec930859c7c819fe5fe5b565fa1c4046fa8274e\"\u003e5ec9308\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e update gitignore (\u003ca href=\"https://github.com/groq/groq-python/commit/29f97bf5c11c1fb49276c8e080b1b0d24d156ba8\"\u003e29f97bf\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.19.4 (\u003ca href=\"https://github.com/groq/groq-python/commit/7c9854eaa8532f4611e169e0b76bed87f80dc2cb\"\u003e7c9854e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- 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/groq/groq-python/blob/main/CHANGELOG.md\"\u003egroq's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.2.0 (2026-04-18)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/groq/groq-python/compare/v1.1.2...v1.2.0\"\u003ev1.1.2...v1.2.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e implement indices array format for query and form serialization (\u003ca href=\"https://github.com/groq/groq-python/commit/80ca9750622cdd94562c34de4ef69326fdb78dd7\"\u003e80ca975\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e preserve hardcoded query params when merging with user params (\u003ca href=\"https://github.com/groq/groq-python/commit/ff12a2087a814e0baf815d0ee89dd73f18e13bae\"\u003eff12a20\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eensure file data are only sent as 1 parameter (\u003ca href=\"https://github.com/groq/groq-python/commit/f67099c22321d15021f283526c9cb85a58d98a8f\"\u003ef67099c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e optimize file structure copying in multipart requests (\u003ca href=\"https://github.com/groq/groq-python/commit/22d711f2bc262fe3bf8633d1a6c087f43c852c7d\"\u003e22d711f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.20.1 (\u003ca href=\"https://github.com/groq/groq-python/commit/f031213b83b91aba73d67806d4a85c3b71351582\"\u003ef031213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.20.2 (\u003ca href=\"https://github.com/groq/groq-python/commit/66e56a7ea574ce79d17c8bc0c2d02d1d2f23608c\"\u003e66e56a7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.22.1 (\u003ca href=\"https://github.com/groq/groq-python/commit/65e653508867f1c7cba8f83d4c56083577718bbe\"\u003e65e6535\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eimprove examples (\u003ca href=\"https://github.com/groq/groq-python/commit/9b75c4cb0c78c759df1ee4fbd0751ecf09328745\"\u003e9b75c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.1.2 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/groq/groq-python/compare/v1.1.1...v1.1.2\"\u003ev1.1.1...v1.1.2\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e bump minimum typing-extensions version (\u003ca href=\"https://github.com/groq/groq-python/commit/3ef90d5a347a277257127abcba3f457ca35d5485\"\u003e3ef90d5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003epydantic:\u003c/strong\u003e do not pass \u003ccode\u003eby_alias\u003c/code\u003e unless set (\u003ca href=\"https://github.com/groq/groq-python/commit/f84dd8ce6be887992445f10af1aac8102b2c6423\"\u003ef84dd8c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esanitize endpoint path params (\u003ca href=\"https://github.com/groq/groq-python/commit/4e57480cbe6e7d85353d04c49f931a300ff50436\"\u003e4e57480\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eci:\u003c/strong\u003e skip lint on metadata-only changes (\u003ca href=\"https://github.com/groq/groq-python/commit/e34867c6f89e39d61fb18fd7710222dd8740bac6\"\u003ee34867c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e tweak CI branches (\u003ca href=\"https://github.com/groq/groq-python/commit/5ec930859c7c819fe5fe5b565fa1c4046fa8274e\"\u003e5ec9308\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e update gitignore (\u003ca href=\"https://github.com/groq/groq-python/commit/29f97bf5c11c1fb49276c8e080b1b0d24d156ba8\"\u003e29f97bf\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.19.4 (\u003ca href=\"https://github.com/groq/groq-python/commit/7c9854eaa8532f4611e169e0b76bed87f80dc2cb\"\u003e7c9854e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.19.5 (\u003ca href=\"https://github.com/groq/groq-python/commit/e3a0370c2b379156e24816c471e1423b09c1eb99\"\u003ee3a0370\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.19.6 (\u003ca href=\"https://github.com/groq/groq-python/commit/001301b292c08a94b41eb2fab8be04720fda2c78\"\u003e001301b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/fcdebf0b4318b651e42dc4ff67c859c525cbf0bb\"\u003e\u003ccode\u003efcdebf0\u003c/code\u003e\u003c/a\u003e release: 1.2.0 (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/270\"\u003e#270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/9793d5e9c3993ee7b7b0a9b75a7f324ac7de0323\"\u003e\u003ccode\u003e9793d5e\u003c/code\u003e\u003c/a\u003e release: 1.1.2 (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/269\"\u003e#269\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/210cc4fcaee7fa02d731b9066209385e6b3288fd\"\u003e\u003ccode\u003e210cc4f\u003c/code\u003e\u003c/a\u003e release: 1.1.1 (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/268\"\u003e#268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/3203b083eacecc3c4cfaf4c3fa66b17b53b52801\"\u003e\u003ccode\u003e3203b08\u003c/code\u003e\u003c/a\u003e release: 1.1.0 (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/263\"\u003e#263\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/5f0082afd5ba6b28f9842e41bfc1dabe5ab075a8\"\u003e\u003ccode\u003e5f0082a\u003c/code\u003e\u003c/a\u003e fix: use valid Python version and fix mypy lint error (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/267\"\u003e#267\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/01190ecbbb5b0c2afe107fabb02195ce7521e2e1\"\u003e\u003ccode\u003e01190ec\u003c/code\u003e\u003c/a\u003e chore: deprecate Python 3.9 support (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/264\"\u003e#264\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/1dd148ef082c4f86efab3b8f16f7d920096c0841\"\u003e\u003ccode\u003e1dd148e\u003c/code\u003e\u003c/a\u003e Update CODEOWNERS (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/265\"\u003e#265\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/ec09723903b08454ad351627c7d9ba58b547278d\"\u003e\u003ccode\u003eec09723\u003c/code\u003e\u003c/a\u003e release: 1.0.0 (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/262\"\u003e#262\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/b03b94b13a28855e67baf7c47153f9792c02d6d3\"\u003e\u003ccode\u003eb03b94b\u003c/code\u003e\u003c/a\u003e release: 0.37.1 (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/846b03892afb06d743b438a748620912bf68e295\"\u003e\u003ccode\u003e846b038\u003c/code\u003e\u003c/a\u003e release: 0.37.0 (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/259\"\u003e#259\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/groq/groq-python/compare/v0.33.0...v1.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `torchcodec` from 0.8.1 to 0.11.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytorch/torchcodec/releases\"\u003etorchcodec's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eTorchCodec 0.11.1\u003c/h2\u003e\n\u003cp\u003eWe are releasing TorchCodec 0.11.1 as a bug-fix release, and it is compatible with torch 2.11.\u003c/p\u003e\n\u003ch3\u003eThe fix:\u003c/h3\u003e\n\u003cp\u003eIn \u003ca href=\"https://github.com/meta-pytorch/torchcodec/releases/tag/v0.11.0\"\u003e0.11\u003c/a\u003e, we began uploading CUDA 13.0 linux wheels to PyPI, so \u003ccode\u003epip install torchcodec\u003c/code\u003e would install a CUDA enabled wheel. This caused an error at import time for users without the necessary CUDA libraries, or for users who only wanted to use CPU decoding.\u003c/p\u003e\n\u003cp\u003eTorchcodec 0.11.1 reverts this change, so \u003ccode\u003epip install torchcodec\u003c/code\u003e will install the CPU wheel. We will resume uploading CUDA wheels as torch does in torchcodec version 0.12!\u003c/p\u003e\n\u003cp\u003eAs before, CUDA wheels are available by specifying the \u003ccode\u003eindex-url\u003c/code\u003e argument:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epip install torchcodec --index-url --index-url https://download.pytorch.org/whl/cu130\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eTorchCodec 0.11\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/releases/tag/v0.11.0\"\u003eTorchCodec 0.11\u003c/a\u003e is out! This release brings CUDA decoding improvements and improved HDR metadata and rotation support in VideoDecoder, as well as output fps support!\u003c/p\u003e\n\u003ch2\u003eCUDA decoder performance improvements\u003c/h2\u003e\n\u003cp\u003eWe made significant improvements to the CUDA decoder throughput, available via the\u003ca href=\"https://meta-pytorch.org/torchcodec/stable/generated/torchcodec.decoders.set_cuda_backend.html#torchcodec.decoders.set_cuda_backend\"\u003e “beta” backend\u003c/a\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/meta-pytorch/torchcodec/pull/1232\"\u003e#1232\u003c/a\u003e fixed a bug in the decoder cache, allowing more than one decoder instance to be cached per video configuration. The fix doesn’t affect single-threaded pipelines, but drastically improves the throughput of \u003ca href=\"https://meta-pytorch.org/torchcodec/stable/generated_examples/decoding/parallel_decoding.html#method-4-joblib-multithreading\"\u003emulti-threaded decoding\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/meta-pytorch/torchcodec/pull/1227\"\u003e#1227\u003c/a\u003e improved cache performance further.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/meta-pytorch/torchcodec/pull/1243\"\u003e#1243\u003c/a\u003e added an LRU eviction policy for the cache, which will improve the cache hit when decoding lots of different video configurations.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/meta-pytorch/torchcodec/pull/1246\"\u003e#1246\u003c/a\u003e added the \u003ca href=\"https://meta-pytorch.org/torchcodec/stable/generated/torchcodec.decoders.set_nvdec_cache_capacity.html#torchcodec.decoders.set_nvdec_cache_capacity\"\u003eset_nvdec_cache_capacity()\u003c/a\u003e which allows the user to control the cache size. Larger cache sizes are typically more performant, and more memory consuming.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThese are available via the\u003ca href=\"https://meta-pytorch.org/torchcodec/stable/generated/torchcodec.decoders.set_cuda_backend.html#torchcodec.decoders.set_cuda_backend\"\u003e “beta” backend”\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e⚠️ Note that in the next release, the “beta” backend will become the default backend. This will be a transparent and backward-compatible change. Users who want to stay on the less efficient FFmpeg backend should use:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003ewith set_cuda_backend(\u0026quot;ffmpeg\u0026quot;):\r\n    decoder = VideoDecoder(..., device=\u0026quot;cuda\u0026quot;)\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eRead more about this in the \u003ca href=\"https://meta-pytorch.org/torchcodec/stable/api_ref_decoders.html\"\u003eCUDA utilities section\u003c/a\u003e!\u003c/p\u003e\n\u003ch2\u003eFPS Resampling\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eget_frames_played_in_range()\u003c/code\u003e now accepts a \u003ccode\u003efps\u003c/code\u003e parameter to resample video at a target frame rate, duplicating or dropping frames as necessary to match the desired output FPS:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003edecoder = VideoDecoder(path)\r\n# If a source video is 25 fps, a 1-second range will contain 25 frames.\r\n# We can use the fps argument to resample to 5 fps, which gives us 5 frames:\r\nframes_5fps = decoder.get_frames_played_in_range(start_seconds=1, stop_seconds=2, fps=5)\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eRead the \u003ca href=\"https://meta-pytorch.org/torchcodec/stable/generated/torchcodec.decoders.VideoDecoder.html#torchcodec.decoders.VideoDecoder.get_frames_played_in_range\"\u003eVideoDecoder docs\u003c/a\u003e for more details!\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/meta-pytorch/torchcodec/pull/1148\"\u003e#1148\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003eRotation Support\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/meta-pytorch/torchcodec/commit/e92214396c04fd3e52c8c4c0a4554c626efc9d4b\"\u003e\u003ccode\u003ee922143\u003c/code\u003e\u003c/a\u003e update ver to 0.11.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/c95b831624998d486001c989980bf143da2ed5fb\"\u003e\u003ccode\u003ec95b831\u003c/code\u003e\u003c/a\u003e [RC 0.11] build and test wheels for all versions (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1245\"\u003e#1245\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/0d4ea1084c0a286dbf4c59d62fae4881125b0149\"\u003e\u003ccode\u003e0d4ea10\u003c/code\u003e\u003c/a\u003e install test torch when using version tag\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/d1fc29efbd30ecbfe3e9e51dbd4284e9f3be9a5e\"\u003e\u003ccode\u003ed1fc29e\u003c/code\u003e\u003c/a\u003e Improve example gallery thumbnails (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1287\"\u003e#1287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/b2fc5cf2a9a432fae4706676c427a52fd73ecd75\"\u003e\u003ccode\u003eb2fc5cf\u003c/code\u003e\u003c/a\u003e Fix SwScale error with non-32 aligned input (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1295\"\u003e#1295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/13e2632b9034cd12cc7b343b69abc159b73e0683\"\u003e\u003ccode\u003e13e2632\u003c/code\u003e\u003c/a\u003e Use float64 instead of float32 in time-based samplers (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1294\"\u003e#1294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/a8a257ab67975e0ab14fa12cae17e2363b4d9819\"\u003e\u003ccode\u003ea8a257a\u003c/code\u003e\u003c/a\u003e Migrate torchcodec docs to sphinx theme2 (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/637bbac2f2d89f24b02c749c3f2d375309d22d0d\"\u003e\u003ccode\u003e637bbac\u003c/code\u003e\u003c/a\u003e Update doc build runner (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1286\"\u003e#1286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/d5855c065ad96e1b78dbb7733e9c39abc6b10c7a\"\u003e\u003ccode\u003ed5855c0\u003c/code\u003e\u003c/a\u003e Address internal lint (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1283\"\u003e#1283\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/4612dfa66750139be163a4fddbfdeefec2e563e4\"\u003e\u003ccode\u003e4612dfa\u003c/code\u003e\u003c/a\u003e Expose HDR Color metadata (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1271\"\u003e#1271\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytorch/torchcodec/compare/v0.8.1...v0.11.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `torchaudio` from 2.8.0 to 2.11.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytorch/audio/releases\"\u003etorchaudio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eTorchAudio 2.11\u003c/h2\u003e\n\u003cp\u003eThis release is compatible with torch 2.11 and is compatible with future versions of torch. No new features were added.\u003c/p\u003e\n\u003ch2\u003eTorchAudio 2.10\u003c/h2\u003e\n\u003cp\u003eThis release is compatible with torch 2.10.\nNo new features were added.\u003c/p\u003e\n\u003cp\u003eThe C++ and CUDA extensions that were previously marked for deprecation are\npreserved and will remain in torchaudio (\u003ccode\u003elfilter\u003c/code\u003e, \u003ccode\u003eRNNTLoss\u003c/code\u003e, \u003ccode\u003eCUCT\u003c/code\u003e, \u003ccode\u003eforced_align\u003c/code\u003e, and \u003ccode\u003eoverdrive\u003c/code\u003e.).\u003c/p\u003e\n\u003cp\u003eThis release marks the finalization of the TorchAudio migration described in \u003ca href=\"https://redirect.github.com/pytorch/audio/issues/3902\"\u003epytorch/audio#3902\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eTorchAudio 2.9.1 Release\u003c/h2\u003e\n\u003cp\u003eThis is a patch release, which is compatible with \u003ca href=\"https://github.com/pytorch/pytorch/releases/tag/v2.9.1\"\u003ePyTorch 2.9.1\u003c/a\u003e. There are no new features added.\u003c/p\u003e\n\u003ch2\u003eTorchAudio 2.9 release\u003c/h2\u003e\n\u003ch3\u003eDeprecated APIs\u003c/h3\u003e\n\u003cp\u003eMost APIs marked as \u003ca href=\"https://redirect.github.com/pytorch/audio/issues/3902#issue-3017467084\"\u003edrop\u003c/a\u003e are now removed.\u003c/p\u003e\n\u003ch3\u003eMigration of \u003ccode\u003eload()\u003c/code\u003e and \u003ccode\u003esave()\u003c/code\u003e to TorchCodec\u003c/h3\u003e\n\u003cp\u003eWe are consolidating the decoding and encoding capabilities of PyTorch in \u003ca href=\"https://github.com/pytorch/torchcodec\"\u003eTorchCodec\u003c/a\u003e. \u003ccode\u003etorchaudio.load()\u003c/code\u003e and \u003ccode\u003etorchaudio.save()\u003c/code\u003e still exist, but their underlying implementation now relies on TorchCodec.\u003c/p\u003e\n\u003ch3\u003eC++ and CUDA extension\u003c/h3\u003e\n\u003cp\u003eWe're still working towards preserving \u003ccode\u003eforced_align\u003c/code\u003e, \u003ccode\u003elfilter\u003c/code\u003e, \u003ccode\u003eoverdrive\u003c/code\u003e, \u003ccode\u003eRNNT\u003c/code\u003e, and \u003ccode\u003eCUCTC\u003c/code\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/pytorch/audio/commit/34c52a67e8941bbd8e6adaca0eb0b9eabec11d78\"\u003e\u003ccode\u003e34c52a6\u003c/code\u003e\u003c/a\u003e [Release 2.11] update test-infra refs and version (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4178\"\u003e#4178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/96200d42e795098ee5e3f0106bcf9c370cf126a1\"\u003e\u003ccode\u003e96200d4\u003c/code\u003e\u003c/a\u003e Retain init args as attributes in MelScale and InverseMelScale (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4126\"\u003e#4126\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/e284e58c83f69c95a7f4a8a7d402f6c27ef56f5d\"\u003e\u003ccode\u003ee284e58\u003c/code\u003e\u003c/a\u003e Remove pinning against torch version (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/e1232690308a6b5297fcd06e925899a9b64f7280\"\u003e\u003ccode\u003ee123269\u003c/code\u003e\u003c/a\u003e Fix building on GCC 14.2 (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/d17635fc326ffee0e67d3ac7f19d35995b0fce65\"\u003e\u003ccode\u003ed17635f\u003c/code\u003e\u003c/a\u003e Update version to 2.11 (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4167\"\u003e#4167\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/cc9f5150c4153b89b904dc25b538d50a879cb3b6\"\u003e\u003ccode\u003ecc9f515\u003c/code\u003e\u003c/a\u003e Fix CMUARCTIC text transcripts reader. (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4164\"\u003e#4164\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/ad992718fa61a621ef66ad858fa0c610a3384ed0\"\u003e\u003ccode\u003ead99271\u003c/code\u003e\u003c/a\u003e Fix unused-variable issues, mostly relating to AMD/HIP\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/0764cfdedb769e63f3ab8b90bc06541a6a2c0b73\"\u003e\u003ccode\u003e0764cfd\u003c/code\u003e\u003c/a\u003e Upgrade GitHub Actions for Node 24 compatibility (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/fbf1d75b2a2cc947b1ae23aed6ff229cce540856\"\u003e\u003ccode\u003efbf1d75\u003c/code\u003e\u003c/a\u003e [Python STABLE ABI] Port pybind11 extension modules to torch stable libraries...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/744912eee04c9ae5b336868b0ff02fced3843d0c\"\u003e\u003ccode\u003e744912e\u003c/code\u003e\u003c/a\u003e Update JIT checks for scripting and tracing (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4160\"\u003e#4160\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytorch/audio/compare/v2.8.0...v2.11.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `torch` from 2.8.0 to 2.11.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytorch/pytorch/releases\"\u003etorch's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ePyTorch 2.11.0 Release Notes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#highlights\"\u003eHighlights\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#backwards-incompatible-changes\"\u003eBackwards Incompatible Changes\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#deprecations\"\u003eDeprecations\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#new-features\"\u003eNew Features\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#improvements\"\u003eImprovements\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#bug-fixes\"\u003eBug fixes\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#performance\"\u003ePerformance\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#documentation\"\u003eDocumentation\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#developers\"\u003eDevelopers\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#security\"\u003eSecurity\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eHighlights\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eFor more details about these highlighted features, you can look at the \u003ca href=\"https://pytorch.org/blog/pytorch-2-11-release-blog/\"\u003erelease blogpost\u003c/a\u003e. Below are the full release notes for this release.\u003c/p\u003e\n\u003ch1\u003eBackwards Incompatible Changes\u003c/h1\u003e\n\u003ch2\u003eRelease Engineering\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/pytorch/pytorch/commit/70d99e998b4955e0049d13a98d77ae1b14db1f45\"\u003e\u003ccode\u003e70d99e9\u003c/code\u003e\u003c/a\u003e [release only] Increase timeout for rocm libtorch and manywheel builds (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/178006\"\u003e#178006\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/3e05c5a9ca8aacd0d137541876f8bf4cfca7e940\"\u003e\u003ccode\u003e3e05c5a\u003c/code\u003e\u003c/a\u003e [MPS] Properly handle conjugated tensors in bmm (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/178010\"\u003e#178010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/db741c72097871e384b22ee6fff1d6083adf23cc\"\u003e\u003ccode\u003edb741c7\u003c/code\u003e\u003c/a\u003e [MPS] fix compiling of SDPA producing nan results (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/178009\"\u003e#178009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/483b55d84c74b92b3c2c67be4b9b7c7359ec2bbc\"\u003e\u003ccode\u003e483b55d\u003c/code\u003e\u003c/a\u003e Update pytorch_sphinx_theme2 version to 0.4.6 (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/177616\"\u003e#177616\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/7f2cdeb75b76bf07bb73776444bbb94456adbfa0\"\u003e\u003ccode\u003e7f2cdeb\u003c/code\u003e\u003c/a\u003e [windows][smoke test] Add an option to install cuda if required cuda/cudnn on...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/76fd07897dd9126df160e9723d97511b79888087\"\u003e\u003ccode\u003e76fd078\u003c/code\u003e\u003c/a\u003e [release-only] Fix libtorch builds. Fix lint (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/177299\"\u003e#177299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/fa384de31efe6548e694758d47ff295f2c2edb57\"\u003e\u003ccode\u003efa384de\u003c/code\u003e\u003c/a\u003e [Inductor][MPS] Fix half-precision type mismatches in Metal shader codegen (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/036b25f5a29dc58cbc62e7b976efb860ff128c3f\"\u003e\u003ccode\u003e036b25f\u003c/code\u003e\u003c/a\u003e Let stable::from_blob accept a lambda as deleter (cherry-pick) (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/176440\"\u003e#176440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/41f8e3e0381395e1669ca4bc6e36a7872d25cdcd\"\u003e\u003ccode\u003e41f8e3e\u003c/code\u003e\u003c/a\u003e [CI] Stop using G3 runners (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/177161\"\u003e#177161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/e2fa2953033020ad7e0f823ec534044fac15a3c7\"\u003e\u003ccode\u003ee2fa295\u003c/code\u003e\u003c/a\u003e [CD] Unpin cuda-bindings dependencies (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/177159\"\u003e#177159\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytorch/pytorch/compare/v2.8.0...v2.11.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.0.0 to 12.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/...\n\n_Description has been truncated_","html_url":"https://github.com/bpwhelan/GameSentenceMiner/pull/463","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/bpwhelan%2FGameSentenceMiner/issues/463","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/463/packages"},{"uuid":"4476682648","node_id":"PR_kwDOR0tLLM7dB9Hg","number":59,"state":"open","title":"chore(deps): bump the python-non-major group across 1 directory with 28 updates","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-19T10:45:11.000Z","updated_at":"2026-05-19T10:51:34.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-non-major","update_count":28,"packages":[{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"requests","old_version":"2.32.5","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"lxml","old_version":"6.0.4","new_version":"6.1.1","repository_url":"https://github.com/lxml/lxml"},{"name":"ruff","old_version":"0.14.8","new_version":"0.15.13","repository_url":"https://github.com/astral-sh/ruff"},{"name":"datamodel-code-generator","old_version":"0.45.0","new_version":"0.57.0","repository_url":"https://github.com/koxudaxi/datamodel-code-generator"},{"name":"pytest","old_version":"9.0.2","new_version":"9.0.3","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"presidio-analyzer","old_version":"2.2.361","new_version":"2.2.362","repository_url":"https://github.com/Microsoft/presidio"},{"name":"spacy","old_version":"3.8.11","new_version":"3.8.14","repository_url":"https://github.com/explosion/spaCy"},{"name":"torch","old_version":"2.10.0","new_version":"2.12.0","repository_url":"https://github.com/pytorch/pytorch"},{"name":"onnxruntime","old_version":"1.24.2","new_version":"1.26.0","repository_url":"https://github.com/microsoft/onnxruntime"},{"name":"pillow","old_version":"12.1.1","new_version":"12.2.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"datasketch","old_version":"1.9.0","new_version":"1.10.0","repository_url":"https://github.com/ekzhu/datasketch"},{"name":"sentence-transformers","old_version":"5.2.3","new_version":"5.5.0","repository_url":"https://github.com/huggingface/sentence-transformers"},{"name":"datasets","old_version":"4.6.0","new_version":"4.8.5","repository_url":"https://github.com/huggingface/datasets"},{"name":"gliner2","old_version":"1.3.0","new_version":"1.3.1","repository_url":"https://github.com/fastino-ai/GLiNER2"},{"name":"chardet","old_version":"7.4.2","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"docling","old_version":"2.93.0","new_version":"2.94.0","repository_url":"https://github.com/docling-project/docling"},{"name":"psycopg2-binary","old_version":"2.9.11","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"pymysql","old_version":"1.1.2","new_version":"1.2.0","repository_url":"https://github.com/PyMySQL/PyMySQL"},{"name":"databricks-sql-connector","old_version":"4.2.5","new_version":"4.2.6","repository_url":"https://github.com/databricks/databricks-sql-python"},{"name":"snowflake-connector-python","old_version":"4.3.0","new_version":"4.5.0","repository_url":"https://github.com/snowflakedb/snowflake-connector-python"},{"name":"pymongo","old_version":"4.16.0","new_version":"4.17.0","repository_url":"https://github.com/mongodb/mongo-python-driver"},{"name":"boto3","old_version":"1.42.56","new_version":"1.43.10","repository_url":"https://github.com/boto/boto3"},{"name":"azure-storage-blob","old_version":"12.28.0","new_version":"12.29.0","repository_url":"https://github.com/Azure/azure-sdk-for-python"},{"name":"azure-identity","old_version":"1.25.2","new_version":"1.25.3","repository_url":"https://github.com/Azure/azure-sdk-for-python"},{"name":"google-cloud-storage","old_version":"3.9.0","new_version":"3.10.1","repository_url":"https://github.com/googleapis/python-storage"},{"name":"opentelemetry-sdk","old_version":"1.41.0","new_version":"1.42.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-non-major group with 27 updates in the /apps/cli directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.13.4` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.34.2` |\n| [lxml](https://github.com/lxml/lxml) | `6.0.4` | `6.1.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.14.8` | `0.15.13` |\n| [datamodel-code-generator](https://github.com/koxudaxi/datamodel-code-generator) | `0.45.0` | `0.57.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.2` | `9.0.3` |\n| [presidio-analyzer](https://github.com/Microsoft/presidio) | `2.2.361` | `2.2.362` |\n| [spacy](https://github.com/explosion/spaCy) | `3.8.11` | `3.8.14` |\n| [torch](https://github.com/pytorch/pytorch) | `2.10.0` | `2.12.0` |\n| [onnxruntime](https://github.com/microsoft/onnxruntime) | `1.24.2` | `1.26.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.1.1` | `12.2.0` |\n| [datasketch](https://github.com/ekzhu/datasketch) | `1.9.0` | `1.10.0` |\n| [sentence-transformers](https://github.com/huggingface/sentence-transformers) | `5.2.3` | `5.5.0` |\n| [datasets](https://github.com/huggingface/datasets) | `4.6.0` | `4.8.5` |\n| [gliner2](https://github.com/fastino-ai/GLiNER2) | `1.3.0` | `1.3.1` |\n| [chardet](https://github.com/chardet/chardet) | `7.4.2` | `7.4.3` |\n| [docling](https://github.com/docling-project/docling) | `2.93.0` | `2.94.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [pymysql](https://github.com/PyMySQL/PyMySQL) | `1.1.2` | `1.2.0` |\n| [databricks-sql-connector](https://github.com/databricks/databricks-sql-python) | `4.2.5` | `4.2.6` |\n| [snowflake-connector-python](https://github.com/snowflakedb/snowflake-connector-python) | `4.3.0` | `4.5.0` |\n| [pymongo](https://github.com/mongodb/mongo-python-driver) | `4.16.0` | `4.17.0` |\n| [boto3](https://github.com/boto/boto3) | `1.42.56` | `1.43.10` |\n| [azure-storage-blob](https://github.com/Azure/azure-sdk-for-python) | `12.28.0` | `12.29.0` |\n| [azure-identity](https://github.com/Azure/azure-sdk-for-python) | `1.25.2` | `1.25.3` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.9.0` | `3.10.1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.41.0` | `1.42.0` |\n\n\nUpdates `pydantic` from 2.12.5 to 2.13.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.0 2026-04-13\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.4/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.1\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/cf67d4b3193c3fe43ede18612ed62785eee11382\"\u003e\u003ccode\u003ecf67d4b\u003c/code\u003e\u003c/a\u003e Fix linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/f0d8a214a5803036db46a56b1f62f1e56b81d662\"\u003e\u003ccode\u003ef0d8a21\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/5e3fe1d41a00f441204241c66078003ae0391f9a\"\u003e\u003ccode\u003e5e3fe1d\u003c/code\u003e\u003c/a\u003e Check for pydantic tag pattern in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7f9edcc2a191d2eaa9751220eb910914e716a686\"\u003e\u003ccode\u003e7f9edcc\u003c/code\u003e\u003c/a\u003e Document tagging conventions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b46a0c9b8a4dd967fda8ec1a92f6437076bf262c\"\u003e\u003ccode\u003eb46a0c9\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/50629c851e61d887d5420452c311ec6203f1f400\"\u003e\u003ccode\u003e50629c8\u003c/code\u003e\u003c/a\u003e Update to PyPy 7.3.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/8522ebb71e5e9a6f7188af5f009f01785b8cf725\"\u003e\u003ccode\u003e8522ebb\u003c/code\u003e\u003c/a\u003e Preserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a37f3aff090ca342dc5f48304889963530b993f8\"\u003e\u003ccode\u003ea37f3af\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003eMISSING\u003c/code\u003e sentinel test to work with unreleased \u003ccode\u003etyping_extensions\u003c/code\u003e ver...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/909259a9df660518033aa686b689f045a6eaf9d2\"\u003e\u003ccode\u003e909259a\u003c/code\u003e\u003c/a\u003e Remove Logfire example in documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2c4174c366606fc2dc46cb806833a080aefa77df\"\u003e\u003ccode\u003e2c4174c\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.155 to 0.2.185\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.5...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.32.5 to 2.34.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `lxml` from 6.0.4 to 6.1.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/lxml/lxml/blob/master/CHANGES.txt\"\u003elxml's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e6.1.1 (2026-05-18)\u003c/h1\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe known link attributes in \u003ccode\u003elxml.html.defs.link_attrs\u003c/code\u003e were missing \u003ccode\u003exlink:href\u003c/code\u003e,\nwhich can be used for URL bypass attacks in embedded SVG/MathML/etc. content.\n\u003ca href=\"https://github.com/fedora-python/lxml_html_clean/security/advisories/GHSA-4jhm-jv67-739f\"\u003ehttps://github.com/fedora-python/lxml_html_clean/security/advisories/GHSA-4jhm-jv67-739f\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe Linux wheels use a patched libxslt 1.1.43, fixing CVE-2025-7424 and CVE-2025-11731.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe Windows wheels use libxslt 1.1.45, fixing CVE-2025-7424 and CVE-2025-11731.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e6.1.0 (2026-04-17)\u003c/h1\u003e\n\u003cp\u003eThis release fixes a possible external entity injection (XXE) vulnerability in\n\u003ccode\u003eiterparse()\u003c/code\u003e and the \u003ccode\u003eETCompatXMLParser\u003c/code\u003e.\u003c/p\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eGH#486: The HTML ARIA accessibility attributes were added to the set of safe attributes\nin \u003ccode\u003elxml.html.defs\u003c/code\u003e.  This allows \u003ccode\u003elxml_html_clean\u003c/code\u003e to pass them through.\nPatch by oomsveta.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe default chunk size for reading from file-likes in \u003ccode\u003eiterparse()\u003c/code\u003e is now configurable\nwith a new \u003ccode\u003echunk_size\u003c/code\u003e argument.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eLP#2146291: The \u003ccode\u003eresolve_entities\u003c/code\u003e option was still set to \u003ccode\u003eTrue\u003c/code\u003e for\n\u003ccode\u003eiterparse\u003c/code\u003e and \u003ccode\u003eETCompatXMLParser\u003c/code\u003e, allowing for external entity injection (XXE)\nwhen using these parsers without setting this option explicitly.\nThe default was now changed to \u003ccode\u003e'internal'\u003c/code\u003e only (as for the normal XML and HTML parsers\nsince lxml 5.0).\nIssue found by Sihao Qiu as CVE-2026-41066.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/b4a4c595fb875d6f50ae113449834209a364643a\"\u003e\u003ccode\u003eb4a4c59\u003c/code\u003e\u003c/a\u003e Build: Fix build in Py3.8.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/a116dcbe671a792dd65bc73f53a8209e7d7c25ff\"\u003e\u003ccode\u003ea116dcb\u003c/code\u003e\u003c/a\u003e Fix typo: type annotions -\u0026gt; type annotations in PEP 560 comments (\u003ca href=\"https://redirect.github.com/lxml/lxml/issues/504\"\u003eGH-504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/7287a75eedc4cdc247a7937d09013e936c34ace6\"\u003e\u003ccode\u003e7287a75\u003c/code\u003e\u003c/a\u003e Prepare release of 6.1.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/5927a6d5e851845140975d99b65461e255caaab0\"\u003e\u003ccode\u003e5927a6d\u003c/code\u003e\u003c/a\u003e Add missing \u0026quot;xlink:href\u0026quot; to the known HTML link attributes.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/23efeb4910e43e9545b754ce1f138d91ed5cc25c\"\u003e\u003ccode\u003e23efeb4\u003c/code\u003e\u003c/a\u003e Build: Fix build in Py3.8.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/2c0563b3e8c272e62667c7850612347f65d2952e\"\u003e\u003ccode\u003e2c0563b\u003c/code\u003e\u003c/a\u003e Build: Add bug patch for libxslt 1.1.43 and apply it during the static librar...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/8a35fcc3ed53975c762867c3ac8ae318c7960be7\"\u003e\u003ccode\u003e8a35fcc\u003c/code\u003e\u003c/a\u003e Fix doctest in PyPy3.9.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/43722f4402afa48b7890a96ce012eb0b9b1af5be\"\u003e\u003ccode\u003e43722f4\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/87470409b17188a5a7dbefcfa124af9cd792ffaa\"\u003e\u003ccode\u003e8747040\u003c/code\u003e\u003c/a\u003e Name version of option change in docstring.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/6c36e6cef77db5087a1fff1a0d1ca8fed963afe7\"\u003e\u003ccode\u003e6c36e6c\u003c/code\u003e\u003c/a\u003e Fix pypistats URL in download statistics script.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/lxml/lxml/compare/lxml-6.0.4...lxml-6.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.14.8 to 0.15.13\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.13\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-14.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a rule to flag lazy imports that are eagerly evaluated (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25016\"\u003e#25016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Standardize diagnostic message (\u003ccode\u003ePLR0914\u003c/code\u003e, \u003ccode\u003ePLR0917\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24996\"\u003e#24996\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eF811\u003c/code\u003e false positive for class methods (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24933\"\u003e#24933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix setting selection for multi-folder workspace (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24819\"\u003e#24819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eeradicate\u003c/code\u003e] Fix false positive for lines with leading whitespace (\u003ccode\u003eERA001\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25122\"\u003e#25122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive for f-string debug specifier (\u003ccode\u003ePYI016\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24098\"\u003e#24098\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlways include panic payload in panic diagnostic message (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24873\"\u003e#24873\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict \u003ccode\u003ePYI034\u003c/code\u003e for in-place operations to enclosing class (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24511\"\u003e#24511\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove error message for parameters that are declared \u003ccode\u003eglobal\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24902\"\u003e#24902\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate known stdlib (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25103\"\u003e#25103\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eisort\u003c/code\u003e] Avoid constructing \u003ccode\u003eglob::Pattern\u003c/code\u003es for literal known modules (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25123\"\u003e#25123\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd TOML examples to \u003ccode\u003e--config\u003c/code\u003e help text (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25013\"\u003e#25013\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eColorize ruff check 'All checks passed' (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25085\"\u003e#25085\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eConfiguration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIncrease max allowed value of \u003ccode\u003eline-length\u003c/code\u003e setting (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24962\"\u003e#24962\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eD203\u003c/code\u003e to rules that conflict with the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25044\"\u003e#25044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eClarify \u003ccode\u003eCOM819\u003c/code\u003e and formatter interaction (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25045\"\u003e#25045\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eClarify that \u003ccode\u003eNotImplemented\u003c/code\u003e is a value, not an exception (\u003ccode\u003eF901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25054\"\u003e#25054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate number of lint rules supported (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24942\"\u003e#24942\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify the playground's markdown template (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24924\"\u003e#24924\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.13\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-14.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a rule to flag lazy imports that are eagerly evaluated (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25016\"\u003e#25016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Standardize diagnostic message (\u003ccode\u003ePLR0914\u003c/code\u003e, \u003ccode\u003ePLR0917\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24996\"\u003e#24996\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eF811\u003c/code\u003e false positive for class methods (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24933\"\u003e#24933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix setting selection for multi-folder workspace (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24819\"\u003e#24819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eeradicate\u003c/code\u003e] Fix false positive for lines with leading whitespace (\u003ccode\u003eERA001\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25122\"\u003e#25122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive for f-string debug specifier (\u003ccode\u003ePYI016\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24098\"\u003e#24098\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlways include panic payload in panic diagnostic message (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24873\"\u003e#24873\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict \u003ccode\u003ePYI034\u003c/code\u003e for in-place operations to enclosing class (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24511\"\u003e#24511\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove error message for parameters that are declared \u003ccode\u003eglobal\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24902\"\u003e#24902\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate known stdlib (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25103\"\u003e#25103\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eisort\u003c/code\u003e] Avoid constructing \u003ccode\u003eglob::Pattern\u003c/code\u003es for literal known modules (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25123\"\u003e#25123\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd TOML examples to \u003ccode\u003e--config\u003c/code\u003e help text (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25013\"\u003e#25013\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eColorize ruff check 'All checks passed' (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25085\"\u003e#25085\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eConfiguration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIncrease max allowed value of \u003ccode\u003eline-length\u003c/code\u003e setting (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24962\"\u003e#24962\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eD203\u003c/code\u003e to rules that conflict with the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25044\"\u003e#25044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eClarify \u003ccode\u003eCOM819\u003c/code\u003e and formatter interaction (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25045\"\u003e#25045\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eClarify that \u003ccode\u003eNotImplemented\u003c/code\u003e is a value, not an exception (\u003ccode\u003eF901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25054\"\u003e#25054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate number of lint rules supported (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24942\"\u003e#24942\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify the playground's markdown template (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24924\"\u003e#24924\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/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/2afb467ce397e4a89c13a0a814c62cfecb0e9e49\"\u003e\u003ccode\u003e2afb467\u003c/code\u003e\u003c/a\u003e Bump 0.15.13 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25157\"\u003e#25157\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/300879600fa3af7cde1e675c63de6ad9d0797d1b\"\u003e\u003ccode\u003e3008796\u003c/code\u003e\u003c/a\u003e [ty] classify TypeVar semantic tokens as type parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24891\"\u003e#24891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/79470e31877acb6074f3bbff2a49e508822ae4e8\"\u003e\u003ccode\u003e79470e3\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eisort\u003c/code\u003e] Avoid constructing \u003ccode\u003eglob::Pattern\u003c/code\u003es for literal known modules (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25123\"\u003e#25123\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/2522549901d50f18775999f0fb802b19229417f0\"\u003e\u003ccode\u003e2522549\u003c/code\u003e\u003c/a\u003e Remove shellcheck from prek (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25154\"\u003e#25154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7db7170020f539d6d2bc01dbd0b0c09fab91dc06\"\u003e\u003ccode\u003e7db7170\u003c/code\u003e\u003c/a\u003e [ty] Support TypedDict key completions in incomplete, anonymous contexts (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25\"\u003e#25\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/bb3dd535f1c5a83e2e56ac93a771fadbeeceebd0\"\u003e\u003ccode\u003ebb3dd53\u003c/code\u003e\u003c/a\u003e [ty] Run full iteration analysis on narrowed typevars (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25143\"\u003e#25143\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/828cdb7732efcb16a53f4ee5f011cf653b834d1a\"\u003e\u003ccode\u003e828cdb7\u003c/code\u003e\u003c/a\u003e [ty] Isolate file-watching test environment (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25151\"\u003e#25151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/89e1d8670ea4d3af60c8143ee552dc750200718d\"\u003e\u003ccode\u003e89e1d86\u003c/code\u003e\u003c/a\u003e [ty] Preserve TypedDict keys through dict unpacking (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24523\"\u003e#24523\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/86f3064d6fffa5697d174f26b840bd6857b381da\"\u003e\u003ccode\u003e86f3064\u003c/code\u003e\u003c/a\u003e [ty] Avoid accessing \u003ccode\u003eargs[0]\u003c/code\u003e for \u003ccode\u003estatic_assert\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25149\"\u003e#25149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ed819f947dc27e36eac8bb3134153c4668d76a3a\"\u003e\u003ccode\u003eed819f9\u003c/code\u003e\u003c/a\u003e [ty] Treat custom enum \u003ccode\u003e__new__\u003c/code\u003e values as dynamic (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25136\"\u003e#25136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.14.8...0.15.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `datamodel-code-generator` from 0.45.0 to 0.57.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/releases\"\u003edatamodel-code-generator's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.57.0\u003c/h2\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eCode Generation Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--use-default\u003c/code\u003e no longer makes required fields nullable - Previously, \u003ccode\u003e--use-default\u003c/code\u003e turned required fields into optional nullable fields (e.g., \u003ccode\u003estatus: str | None = 'active'\u003c/code\u003e). Now required fields keep their original non-nullable type and just get the default value rendered (e.g., \u003ccode\u003estatus: str = 'active'\u003c/code\u003e). Users whose downstream code depends on these fields being \u003ccode\u003eOptional\u003c/code\u003e/nullable will need to update. (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3054\"\u003e#3054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequired model-ref fields no longer render defaults without \u003ccode\u003e--use-default\u003c/code\u003e - Previously, required fields referencing models (e.g., \u003ccode\u003eshipping_address: Address\u003c/code\u003e) inconsistently rendered defaults with \u003ccode\u003evalidate_default=True\u003c/code\u003e while scalar required fields did not. Now all required fields consistently omit defaults unless \u003ccode\u003e--use-default\u003c/code\u003e is passed. Users who relied on the previous behavior where model-ref required fields had defaults rendered will see those defaults removed. (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3054\"\u003e#3054\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCustom Template Update Required\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBuilt-in Jinja2 templates now use \u003ccode\u003efield.use_default_with_required\u003c/code\u003e - The built-in templates for \u003ccode\u003eBaseModel\u003c/code\u003e, \u003ccode\u003edataclass\u003c/code\u003e, \u003ccode\u003epydantic_v2/dataclass\u003c/code\u003e, and \u003ccode\u003emsgspec\u003c/code\u003e were updated to check \u003ccode\u003efield.use_default_with_required\u003c/code\u003e alongside \u003ccode\u003efield.required\u003c/code\u003e when deciding whether to render defaults. Custom templates that replicate the old default-rendering logic (e.g., \u003ccode\u003e{%- if not field.required %}\u003c/code\u003e) will still work but won't support the new \u003ccode\u003e--use-default\u003c/code\u003e behavior for required fields. To get the updated behavior, custom templates should change conditions like \u003ccode\u003enot field.required\u003c/code\u003e to \u003ccode\u003e(not field.required or field.use_default_with_required)\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3054\"\u003e#3054\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden workflow credentials by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3095\"\u003ekoxudaxi/datamodel-code-generator#3095\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix release automation workflows by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3110\"\u003ekoxudaxi/datamodel-code-generator#3110\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce shared assertions in e2e tests by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3108\"\u003ekoxudaxi/datamodel-code-generator#3108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix docs preview required check by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3112\"\u003ekoxudaxi/datamodel-code-generator#3112\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix required field default rendering and --use-default nullable types by \u003ca href=\"https://github.com/butvinm\"\u003e\u003ccode\u003e@​butvinm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3054\"\u003ekoxudaxi/datamodel-code-generator#3054\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove unused CLI doc schema version lookup by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3113\"\u003ekoxudaxi/datamodel-code-generator#3113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix byte to binary type mapping by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3114\"\u003ekoxudaxi/datamodel-code-generator#3114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCreate generated docs sync PRs by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3117\"\u003ekoxudaxi/datamodel-code-generator#3117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport local HTTP ref paths by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3116\"\u003ekoxudaxi/datamodel-code-generator#3116\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix reuse discriminator literals by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3115\"\u003ekoxudaxi/datamodel-code-generator#3115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocstrings that can be single line to be formatted on a single line by \u003ca href=\"https://github.com/kevin-paulson-mindbridge-ai\"\u003e\u003ccode\u003e@​kevin-paulson-mindbridge-ai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3107\"\u003ekoxudaxi/datamodel-code-generator#3107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix indefinite hang on OpenAPI schemas with cyclic model dependencies by \u003ca href=\"https://github.com/kevin-paulson-mindbridge-ai\"\u003e\u003ccode\u003e@​kevin-paulson-mindbridge-ai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3078\"\u003ekoxudaxi/datamodel-code-generator#3078\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd OpenAPI enum literal alias regression test by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3124\"\u003ekoxudaxi/datamodel-code-generator#3124\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pydantic model extra warnings by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3127\"\u003ekoxudaxi/datamodel-code-generator#3127\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix snake case array discriminator by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3125\"\u003ekoxudaxi/datamodel-code-generator#3125\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix serialization alias choices by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3126\"\u003ekoxudaxi/datamodel-code-generator#3126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix generated docs sync prompt snapshots by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3129\"\u003ekoxudaxi/datamodel-code-generator#3129\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd manual generated docs sync trigger by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3130\"\u003ekoxudaxi/datamodel-code-generator#3130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse source tree for generated prompt snapshots by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3132\"\u003ekoxudaxi/datamodel-code-generator#3132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate enum member descriptions for anyOf const pattern by \u003ca href=\"https://github.com/mvanhorn\"\u003e\u003ccode\u003e@​mvanhorn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3133\"\u003ekoxudaxi/datamodel-code-generator#3133\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- 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/koxudaxi/datamodel-code-generator/blob/main/CHANGELOG.md\"\u003edatamodel-code-generator's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/releases/tag/0.57.0\"\u003e0.57.0\u003c/a\u003e - 2026-05-07\u003c/h2\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eCode Generation Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--use-default\u003c/code\u003e no longer makes required fields nullable - Previously, \u003ccode\u003e--use-default\u003c/code\u003e turned required fields into optional nullable fields (e.g., \u003ccode\u003estatus: str | None = 'active'\u003c/code\u003e). Now required fields keep their original non-nullable type and just get the default value rendered (e.g., \u003ccode\u003estatus: str = 'active'\u003c/code\u003e). Users whose downstream code depends on these fields being \u003ccode\u003eOptional\u003c/code\u003e/nullable will need to update. (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3054\"\u003e#3054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequired model-ref fields no longer render defaults without \u003ccode\u003e--use-default\u003c/code\u003e - Previously, required fields referencing models (e.g., \u003ccode\u003eshipping_address: Address\u003c/code\u003e) inconsistently rendered defaults with \u003ccode\u003evalidate_default=True\u003c/code\u003e while scalar required fields did not. Now all required fields consistently omit defaults unless \u003ccode\u003e--use-default\u003c/code\u003e is passed. Users who relied on the previous behavior where model-ref required fields had defaults rendered will see those defaults removed. (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3054\"\u003e#3054\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCustom Template Update Required\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBuilt-in Jinja2 templates now use \u003ccode\u003efield.use_default_with_required\u003c/code\u003e - The built-in templates for \u003ccode\u003eBaseModel\u003c/code\u003e, \u003ccode\u003edataclass\u003c/code\u003e, \u003ccode\u003epydantic_v2/dataclass\u003c/code\u003e, and \u003ccode\u003emsgspec\u003c/code\u003e were updated to check \u003ccode\u003efield.use_default_with_required\u003c/code\u003e alongside \u003ccode\u003efield.required\u003c/code\u003e when deciding whether to render defaults. Custom templates that replicate the old default-rendering logic (e.g., \u003ccode\u003e{%- if not field.required %}\u003c/code\u003e) will still work but won't support the new \u003ccode\u003e--use-default\u003c/code\u003e behavior for required fields. To get the updated behavior, custom templates should change conditions like \u003ccode\u003enot field.required\u003c/code\u003e to \u003ccode\u003e(not field.required or field.use_default_with_required)\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3054\"\u003e#3054\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden workflow credentials by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3095\"\u003ekoxudaxi/datamodel-code-generator#3095\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix release automation workflows by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3110\"\u003ekoxudaxi/datamodel-code-generator#3110\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce shared assertions in e2e tests by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3108\"\u003ekoxudaxi/datamodel-code-generator#3108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix docs preview required check by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3112\"\u003ekoxudaxi/datamodel-code-generator#3112\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix required field default rendering and --use-default nullable types by \u003ca href=\"https://github.com/butvinm\"\u003e\u003ccode\u003e@​butvinm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3054\"\u003ekoxudaxi/datamodel-code-generator#3054\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove unused CLI doc schema version lookup by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3113\"\u003ekoxudaxi/datamodel-code-generator#3113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix byte to binary type mapping by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3114\"\u003ekoxudaxi/datamodel-code-generator#3114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCreate generated docs sync PRs by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3117\"\u003ekoxudaxi/datamodel-code-generator#3117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport local HTTP ref paths by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3116\"\u003ekoxudaxi/datamodel-code-generator#3116\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix reuse discriminator literals by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3115\"\u003ekoxudaxi/datamodel-code-generator#3115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocstrings that can be single line to be formatted on a single line by \u003ca href=\"https://github.com/kevin-paulson-mindbridge-ai\"\u003e\u003ccode\u003e@​kevin-paulson-mindbridge-ai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3107\"\u003ekoxudaxi/datamodel-code-generator#3107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix indefinite hang on OpenAPI schemas with cyclic model dependencies by \u003ca href=\"https://github.com/kevin-paulson-mindbridge-ai\"\u003e\u003ccode\u003e@​kevin-paulson-mindbridge-ai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3078\"\u003ekoxudaxi/datamodel-code-generator#3078\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd OpenAPI enum literal alias regression test by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3124\"\u003ekoxudaxi/datamodel-code-generator#3124\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pydantic model extra warnings by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3127\"\u003ekoxudaxi/datamodel-code-generator#3127\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix snake case array discriminator by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3125\"\u003ekoxudaxi/datamodel-code-generator#3125\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix serialization alias choices by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3126\"\u003ekoxudaxi/datamodel-code-generator#3126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix generated docs sync prompt snapshots by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3129\"\u003ekoxudaxi/datamodel-code-generator#3129\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd manual generated docs sync trigger by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3130\"\u003ekoxudaxi/datamodel-code-generator#3130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse source tree for generated prompt snapshots by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3132\"\u003ekoxudaxi/datamodel-code-generator#3132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate enum member descriptions for anyOf const pattern by \u003ca href=\"https://github.com/mvanhorn\"\u003e\u003ccode\u003e@​mvanhorn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3133\"\u003ekoxudaxi/datamodel-code-generator#3133\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow generated prompt snapshot updates by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3134\"\u003ekoxudaxi/datamodel-code-generator#3134\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWrite generated prompt snapshots directly by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3135\"\u003ekoxudaxi/datamodel-code-generator#3135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePreserve tox python preference for generated docs by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3136\"\u003ekoxudaxi/datamodel-code-generator#3136\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSync generated docs by \u003ca href=\"https://github.com/dcg-generated-docs\"\u003e\u003ccode\u003e@​dcg-generated-docs\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3137\"\u003ekoxudaxi/datamodel-code-generator#3137\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/mvanhorn\"\u003e\u003ccode\u003e@​mvanhorn\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3133\"\u003ekoxudaxi/datamodel-code-generator#3133\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dcg-generated-docs\"\u003e\u003ccode\u003e@​dcg-generated-docs\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3137\"\u003ekoxudaxi/datamodel-code-generator#3137\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/compare/0.56.1...0.57.0\"\u003ehttps://github.com/koxudaxi/datamodel-code-generator/compare/0.56.1...0.57.0\u003c/a\u003e\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/releases/tag/0.56.1\"\u003e0.56.1\u003c/a\u003e - 2026-04-16\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e--base-class-map\u003c/code\u003e and \u003ccode\u003e--enum-field-as-literal-map\u003c/code\u003e long inline json support by \u003ca href=\"https://github.com/ilovelinux\"\u003e\u003ccode\u003e@​ilovelinux\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3075\"\u003ekoxudaxi/datamodel-code-generator#3075\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/d0aa6ab9912603a5e8b7c78ff62a1893078542d4\"\u003e\u003ccode\u003ed0aa6ab\u003c/code\u003e\u003c/a\u003e docs: sync generated docs (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/7bd643f3dacdd9f09093bc06a61b0eef49319451\"\u003e\u003ccode\u003e7bd643f\u003c/code\u003e\u003c/a\u003e Preserve tox python preference for generated docs (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3136\"\u003e#3136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/64f218a5711dfde954e50eb6b50c47b254fd35b4\"\u003e\u003ccode\u003e64f218a\u003c/code\u003e\u003c/a\u003e Write generated prompt snapshots directly (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3135\"\u003e#3135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/a7d1e9c47a8603ffd7668264a4e8fe02553d0f90\"\u003e\u003ccode\u003ea7d1e9c\u003c/code\u003e\u003c/a\u003e Allow generated prompt snapshot updates (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3134\"\u003e#3134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/9210c193922c52949e288e8f68e195d56acd34b4\"\u003e\u003ccode\u003e9210c19\u003c/code\u003e\u003c/a\u003e Propagate enum member descriptions for anyOf const pattern (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3133\"\u003e#3133\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/928ba552f4190f0b4c2390d135dcbbb6048ddfc3\"\u003e\u003ccode\u003e928ba55\u003c/code\u003e\u003c/a\u003e Use source tree for generated prompt snapshots (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3132\"\u003e#3132\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/b59971413184e9151882cb0b5906acbf3b3f4df8\"\u003e\u003ccode\u003eb599714\u003c/code\u003e\u003c/a\u003e Add manual generated docs sync trigger (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3130\"\u003e#3130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/93f2bce292f82fde15fe7ad8d4e0eeb2c7fdbb12\"\u003e\u003ccode\u003e93f2bce\u003c/code\u003e\u003c/a\u003e Fix generated docs sync prompt snapshots (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3129\"\u003e#3129\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/919f191f896af8bf62d7aafe9e19a98cf9a05efc\"\u003e\u003ccode\u003e919f191\u003c/code\u003e\u003c/a\u003e Fix serialization alias choices (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3126\"\u003e#3126\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/90b0729b303be4246e4ce9babf825d0e4170b9f7\"\u003e\u003ccode\u003e90b0729\u003c/code\u003e\u003c/a\u003e Fix snake case array discriminator (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3125\"\u003e#3125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/compare/0.45.0...0.57.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 9.0.2 to 9.0.3\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.0.3\u003c/h2\u003e\n\u003ch1\u003epytest 9.0.3 (2026-04-07)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12444\"\u003e#12444\u003c/a\u003e: Fixed \u003ccode\u003epytest.approx\u003c/code\u003e which now correctly takes into account \u003ccode\u003e~collections.abc.Mapping\u003c/code\u003e keys order to compare them.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13634\"\u003e#13634\u003c/a\u003e: Blocking a \u003ccode\u003econftest.py\u003c/code\u003e file using the \u003ccode\u003e-p no:\u003c/code\u003e option is now explicitly disallowed.\u003c/p\u003e\n\u003cp\u003ePreviously this resulted in an internal assertion failure during plugin loading.\u003c/p\u003e\n\u003cp\u003ePytest now raises a clear \u003ccode\u003eUsageError\u003c/code\u003e explaining that conftest files are not plugins and cannot be disabled via \u003ccode\u003e-p\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/13734\"\u003e#13734\u003c/a\u003e: Fixed crash when a test raises an exceptiongroup with \u003ccode\u003e__tracebackhide__ = True\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/14195\"\u003e#14195\u003c/a\u003e: Fixed an issue where non-string messages passed to \u003c!-- raw HTML omitted --\u003eunittest.TestCase.subTest()\u003c!-- raw HTML omitted --\u003e were not printed.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14343\"\u003e#14343\u003c/a\u003e: Fixed use of insecure temporary directory (CVE-2025-71176).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13388\"\u003e#13388\u003c/a\u003e: Clarified documentation for \u003ccode\u003e-p\u003c/code\u003e vs \u003ccode\u003ePYTEST_PLUGINS\u003c/code\u003e plugin loading and fixed an incorrect \u003ccode\u003e-p\u003c/code\u003e example.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13731\"\u003e#13731\u003c/a\u003e: Clarified that capture fixtures (e.g. \u003ccode\u003ecapsys\u003c/code\u003e and \u003ccode\u003ecapfd\u003c/code\u003e) take precedence over the \u003ccode\u003e-s\u003c/code\u003e / \u003ccode\u003e--capture=no\u003c/code\u003e command-line options in \u003ccode\u003eAccessing captured output from a test function \u0026lt;accessing-captured-output\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14088\"\u003e#14088\u003c/a\u003e: Clarified that the default \u003ccode\u003epytest_collection\u003c/code\u003e hook sets \u003ccode\u003esession.items\u003c/code\u003e before it calls \u003ccode\u003epytest_collection_finish\u003c/code\u003e, not after.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14255\"\u003e#14255\u003c/a\u003e: TOML integer log levels must be quoted: Updating reference documentation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12689\"\u003e#12689\u003c/a\u003e: The test reports are now published to Codecov from GitHub Actions.\nThe test statistics is visible \u003ca href=\"https://app.codecov.io/gh/pytest-dev/pytest/tests\"\u003eon the web interface\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e-- by \u003ccode\u003ealeguy02\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/a7d58d7a21b78581e636bbbdea13c66ad1657c1e\"\u003e\u003ccode\u003ea7d58d7\u003c/code\u003e\u003c/a\u003e Prepare release version 9.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/089d98199c253d8f89a040243bc4f2aa6cd5ab22\"\u003e\u003ccode\u003e089d981\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14366\"\u003e#14366\u003c/a\u003e from bluetech/revert-14193-backport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/8127eaf4ab7f6b2fdd0dc1b38343ec97aeef05ac\"\u003e\u003ccode\u003e8127eaf\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Fix: assertrepr_compare respects dict insertion order (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14050\"\u003e#14050\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14193\"\u003e#14193\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/99a7e6029e7a6e8d53e5df114b1346e035370241\"\u003e\u003ccode\u003e99a7e60\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14363\"\u003e#14363\u003c/a\u003e from pytest-dev/patchback/backports/9.0.x/95d8423bd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ddee02a578da30dd43aedc39c1c1f1aaadfcee95\"\u003e\u003ccode\u003eddee02a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14343\"\u003e#14343\u003c/a\u003e from bluetech/cve-2025-71176-simple\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/74eac6916fee34726cb194f16c516e96fbd29619\"\u003e\u003ccode\u003e74eac69\u003c/code\u003e\u003c/a\u003e doc: Update training info (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14298\"\u003e#14298\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14301\"\u003e#14301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f92dee777cfdb77d1c43633d02766ddf1f07c869\"\u003e\u003ccode\u003ef92dee7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14267\"\u003e#14267\u003c/a\u003e from pytest-dev/patchback/backports/9.0.x/d6fa26c62...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7ee58acc8777c31ac6cf388d01addf5a414a7439\"\u003e\u003ccode\u003e7ee58ac\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12378\"\u003e#12378\u003c/a\u003e from Pierre-Sassoulas/fix-implicit-str-concat-and-d...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/37da870d37e3a2f5177cae075c7b9ae279432bf8\"\u003e\u003ccode\u003e37da870\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14259\"\u003e#14259\u003c/a\u003e from mitre88/patch-4 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14268\"\u003e#14268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c34bfa3b7acb65b594707c714f1d8461b0304eed\"\u003e\u003ccode\u003ec34bfa3\u003c/code\u003e\u003c/a\u003e Add explanation for string context diffs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14257\"\u003e#14257\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14266\"\u003e#14266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.0.2...9.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `presidio-analyzer` from 2.2.361 to 2.2.362\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Microsoft/presidio/releases\"\u003epresidio-analyzer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 2.2.362\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFeature - GPU Device Control via Environment Variable by \u003ca href=\"https://github.com/RonShakutai\"\u003e\u003ccode\u003e@​RonShakutai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1844\"\u003emicrosoft/presidio#1844\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Add HuggingFaceNerRecognizer for direct NER model inference by \u003ca href=\"https://github.com/ultramancode\"\u003e\u003ccode\u003e@​ultramancode\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1834\"\u003emicrosoft/presidio#1834\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Broken Links by \u003ca href=\"https://github.com/andyjessen\"\u003e\u003ccode\u003e@​andyjessen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1856\"\u003emicrosoft/presidio#1856\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePin dependencies to mitigate supply chain attacks by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1861\"\u003emicrosoft/presidio#1861\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixing CVE-2024-47874 and CVE-2025-54121 by \u003ca href=\"https://github.com/SharonHart\"\u003e\u003ccode\u003e@​SharonHart\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1860\"\u003emicrosoft/presidio#1860\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixing CVE-2025-2953 and CVE-2025-3730 by \u003ca href=\"https://github.com/SharonHart\"\u003e\u003ccode\u003e@​SharonHart\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1859\"\u003emicrosoft/presidio#1859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: Fixed context enhancement substring matching bug  by \u003ca href=\"https://github.com/ravi-jindal\"\u003e\u003ccode\u003e@​ravi-jindal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1827\"\u003emicrosoft/presidio#1827\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix _process_names unconditionally treating all metadata as PHI by \u003ca href=\"https://github.com/Mr-Neutr0n\"\u003e\u003ccode\u003e@​Mr-Neutr0n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1855\"\u003emicrosoft/presidio#1855\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Add UK Postcode (UK_POSTCODE) recognizer by \u003ca href=\"https://github.com/tee-jagz\"\u003e\u003ccode\u003e@​tee-jagz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1858\"\u003emicrosoft/presidio#1858\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePin ruff and build pip installs by hash for OSSF scorecard compliance by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1864\"\u003emicrosoft/presidio#1864\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd US NPI (National Provider Identifier) recognizer by \u003ca href=\"https://github.com/stevenelliottjr\"\u003e\u003ccode\u003e@​stevenelliottjr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1847\"\u003emicrosoft/presidio#1847\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd transformer-based MedicalNERRecognizer for clinical entity detection by \u003ca href=\"https://github.com/stevenelliottjr\"\u003e\u003ccode\u003e@​stevenelliottjr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1853\"\u003emicrosoft/presidio#1853\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Add Nigeria recognizers (National Identity Number and Vehicle Registration) by \u003ca href=\"https://github.com/tee-jagz\"\u003e\u003ccode\u003e@​tee-jagz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1863\"\u003emicrosoft/presidio#1863\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix validation_result type in api docs and type hint by \u003ca href=\"https://github.com/akios-ai\"\u003e\u003ccode\u003e@​akios-ai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1869\"\u003emicrosoft/presidio#1869\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python from 6.0.0 to 6.2.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/microsoft/presidio/pull/1879\"\u003emicrosoft/presidio#1879\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump github/codeql-action from 3.32.3 to 4.32.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/microsoft/presidio/pull/1878\"\u003emicrosoft/presidio#1878\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/dependency-review-action from 3.1.5 to 4.8.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/microsoft/presidio/pull/1877\"\u003emicrosoft/presidio#1877\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump microsoft/security-devops-action from 1.11.0 to 1.12.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/microsoft/presidio/pull/1876\"\u003emicrosoft/presidio#1876\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/github-script from 7.0.1 to 8.0.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/microsoft/presidio/pull/1875\"\u003emicrosoft/presidio#1875\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump azure/login from 2.1.1 to 2.3.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/microsoft/presidio/pull/1874\"\u003emicrosoft/presidio#1874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump docker/setup-buildx-action from 3.7.1 to 3.12.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/microsoft/presidio/pull/1873\"\u003emicrosoft/presidio#1873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/cache from 4.2.0 to 5.0.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/microsoft/presidio/pull/1872\"\u003emicrosoft...\n\n_Description has been truncated_","html_url":"https://github.com/classifyre-com/classifyre/pull/59","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/classifyre-com%2Fclassifyre/issues/59","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/59/packages"},{"uuid":"4426443027","node_id":"PR_kwDOMFeY887aiI0c","number":181,"state":"open","title":"python-deps(deps): bump the python-dependencies group across 1 directory with 15 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":4,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-12T05:26:32.000Z","updated_at":"2026-05-12T05:37:51.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"python-deps(deps): bump","group_name":"python-dependencies","update_count":15,"packages":[{"name":"packaging","old_version":"26.1","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pydantic","old_version":"2.13.3","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.0","repository_url":"https://github.com/psf/requests"},{"name":"coverage","old_version":"7.13.5","new_version":"7.14.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"pytest-order","old_version":"1.3.0","new_version":"1.4.0","repository_url":"https://github.com/pytest-dev/pytest-order"},{"name":"chardet","old_version":"5.2.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"dataproperty","old_version":"1.1.0","new_version":"1.1.1","repository_url":"https://github.com/thombashi/DataProperty"},{"name":"idna","old_version":"3.13","new_version":"3.14","repository_url":"https://github.com/kjd/idna"},{"name":"mbstrdecoder","old_version":"1.1.4","new_version":"1.1.5","repository_url":"https://github.com/thombashi/mbstrdecoder"},{"name":"pytz","old_version":"2026.1.post1","new_version":"2026.2","repository_url":"https://github.com/stub42/pytz"},{"name":"tabledata","old_version":"1.3.4","new_version":"1.3.5","repository_url":"https://github.com/thombashi/tabledata"},{"name":"typepy","old_version":"1.3.4","new_version":"2.0.0","repository_url":"https://github.com/thombashi/typepy"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"pathspec","old_version":"1.1.0","new_version":"1.1.1","repository_url":"https://github.com/cpburnz/python-pathspec"},{"name":"pydantic-core","old_version":"2.46.3","new_version":"2.46.4","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-dependencies group with 15 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [packaging](https://github.com/pypa/packaging) | `26.1` | `26.2` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.3` | `2.13.4` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.13.5` | `7.14.0` |\n| [pytest-order](https://github.com/pytest-dev/pytest-order) | `1.3.0` | `1.4.0` |\n| [chardet](https://github.com/chardet/chardet) | `5.2.0` | `7.4.3` |\n| [dataproperty](https://github.com/thombashi/DataProperty) | `1.1.0` | `1.1.1` |\n| [idna](https://github.com/kjd/idna) | `3.13` | `3.14` |\n| [mbstrdecoder](https://github.com/thombashi/mbstrdecoder) | `1.1.4` | `1.1.5` |\n| [pytz](https://github.com/stub42/pytz) | `2026.1.post1` | `2026.2` |\n| [tabledata](https://github.com/thombashi/tabledata) | `1.3.4` | `1.3.5` |\n| [typepy](https://github.com/thombashi/typepy) | `1.3.4` | `2.0.0` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [pathspec](https://github.com/cpburnz/python-pathspec) | `1.1.0` | `1.1.1` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.3` | `2.46.4` |\n\n\nUpdates `packaging` from 26.1 to 26.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/releases\"\u003epackaging's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix incorrect sysconfig var name for pyemscripten by \u003ca href=\"https://github.com/ryanking13\"\u003e\u003ccode\u003e@​ryanking13\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1160\"\u003epypa/packaging#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003eVersion\u003c/code\u003e, \u003ccode\u003eSpecifier\u003c/code\u003e, \u003ccode\u003eSpecifierSet\u003c/code\u003e, \u003ccode\u003eTag\u003c/code\u003e, \u003ccode\u003eMarker\u003c/code\u003e, and \u003ccode\u003eRequirement\u003c/code\u003e pickle-safe\nand backward-compatible with pickles created in 25.0-26.1 (including references to the removed\n\u003ccode\u003epackaging._structures\u003c/code\u003e module) by \u003ca href=\"https://github.com/eachimei\"\u003e\u003ccode\u003e@​eachimei\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1163\"\u003epypa/packaging#1163\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1168\"\u003epypa/packaging#1168\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1170\"\u003epypa/packaging#1170\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1171\"\u003epypa/packaging#1171\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: re-export ExceptionGroup for now by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1164\"\u003epypa/packaging#1164\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDocumentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edocs: add errors section and fix missing details by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1159\"\u003epypa/packaging#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs(dev): document property-based test suite by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1167\"\u003epypa/packaging#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in DirectUrl documentation by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1169\"\u003epypa/packaging#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs(specifiers): add is_unsatisfiable() usage example by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1166\"\u003epypa/packaging#1166\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnable the auditor persona on zizmor by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1158\"\u003epypa/packaging#1158\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTest new pickle guarantees by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1174\"\u003epypa/packaging#1174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse native uv integration in rtd by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1175\"\u003epypa/packaging#1175\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ryanking13\"\u003e\u003ccode\u003e@​ryanking13\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1160\"\u003epypa/packaging#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/eachimei\"\u003e\u003ccode\u003e@​eachimei\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1163\"\u003epypa/packaging#1163\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/packaging/compare/26.1...26.2\"\u003ehttps://github.com/pypa/packaging/compare/26.1...26.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/blob/main/CHANGELOG.rst\"\u003epackaging's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e26.2 - 2026-04-24\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\nFixes:\n\u003cul\u003e\n\u003cli\u003eFix incorrect sysconfig var name for pyemscripten in (:pull:\u003ccode\u003e1160\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003eVersion\u003c/code\u003e, \u003ccode\u003eSpecifier\u003c/code\u003e, \u003ccode\u003eSpecifierSet\u003c/code\u003e, \u003ccode\u003eTag\u003c/code\u003e, \u003ccode\u003eMarker\u003c/code\u003e, and \u003ccode\u003eRequirement\u003c/code\u003e pickle-safe\u003cbr /\u003e\nand backward-compatible with pickles created in 25.0-26.1 (including references to the removed\u003cbr /\u003e\n\u003ccode\u003epackaging._structures\u003c/code\u003e module) (:pull:\u003ccode\u003e1163\u003c/code\u003e, :pull:\u003ccode\u003e1168\u003c/code\u003e, :pull:\u003ccode\u003e1170\u003c/code\u003e, :pull:\u003ccode\u003e1171\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRe-export \u003ccode\u003eExceptionGroup\u003c/code\u003e in metadata for now in (:pull:\u003ccode\u003e1164\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDocumentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd errors section and fix missing details in (:pull:\u003ccode\u003e1159\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDocument our property-based test suite in (:pull:\u003ccode\u003e1167\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix a \u003ccode\u003eDirectUrl\u003c/code\u003e typo in (:pull:\u003ccode\u003e1169\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd example of \u003ccode\u003eis_unsatisfiable\u003c/code\u003e in (:pull:\u003ccode\u003e1166\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnable the auditor persona on zizmor in (:pull:\u003ccode\u003e1158\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eTest new pickle guarantees in (:pull:\u003ccode\u003e1174\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eUse new native ReadTheDocs uv integration in (:pull:\u003ccode\u003e1175\u003c/code\u003e)\u003cbr /\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/pypa/packaging/commit/84a87ee42483d7352f9502d78a9553da8859aa7a\"\u003e\u003ccode\u003e84a87ee\u003c/code\u003e\u003c/a\u003e Bump for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/4a616b65bed23c8c6d58e6b0fc1a4434d4ff1f14\"\u003e\u003ccode\u003e4a616b6\u003c/code\u003e\u003c/a\u003e docs: a few more updates to prepare for 26.2 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1176\"\u003e#1176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/9de6f44f1e82d4595edf3aad1c4f6f98c85935a0\"\u003e\u003ccode\u003e9de6f44\u003c/code\u003e\u003c/a\u003e ci: use native uv integration in rtd (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1175\"\u003e#1175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/bc76e14debd1a2799d1ca8f9d9c9823f35bfa466\"\u003e\u003ccode\u003ebc76e14\u003c/code\u003e\u003c/a\u003e chore: update changelog for 26.2 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1161\"\u003e#1161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/3f00091c08f0aa830e33ed7db00f16f11c8ac97f\"\u003e\u003ccode\u003e3f00091\u003c/code\u003e\u003c/a\u003e tests: add a pickle check (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1174\"\u003e#1174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/48a8a069805291186522de3eff73ea80a8ca96ad\"\u003e\u003ccode\u003e48a8a06\u003c/code\u003e\u003c/a\u003e fix: make Requirements/Markers pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1171\"\u003e#1171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/823b44ed1f904084a77ae3adf0ef130af6365f84\"\u003e\u003ccode\u003e823b44e\u003c/code\u003e\u003c/a\u003e fix: make Tags pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1170\"\u003e#1170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/4bed32d920ca7211dd65fdf0a1ee06376e9c4733\"\u003e\u003ccode\u003e4bed32d\u003c/code\u003e\u003c/a\u003e fix: make Specifier / SpecifierSet pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1168\"\u003e#1168\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/963118e37caae97bc8b72f72956c7fb4ca9857ec\"\u003e\u003ccode\u003e963118e\u003c/code\u003e\u003c/a\u003e fix: re-export ExceptionGroup for now (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1164\"\u003e#1164\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/66e34a80256c96dea11da143682950c84b8133bb\"\u003e\u003ccode\u003e66e34a8\u003c/code\u003e\u003c/a\u003e docs(specifiers): add is_unsatisfiable() usage example (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1166\"\u003e#1166\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/packaging/compare/26.1...26.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.3 to 2.13.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.4/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/cf67d4b3193c3fe43ede18612ed62785eee11382\"\u003e\u003ccode\u003ecf67d4b\u003c/code\u003e\u003c/a\u003e Fix linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/f0d8a214a5803036db46a56b1f62f1e56b81d662\"\u003e\u003ccode\u003ef0d8a21\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/5e3fe1d41a00f441204241c66078003ae0391f9a\"\u003e\u003ccode\u003e5e3fe1d\u003c/code\u003e\u003c/a\u003e Check for pydantic tag pattern in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7f9edcc2a191d2eaa9751220eb910914e716a686\"\u003e\u003ccode\u003e7f9edcc\u003c/code\u003e\u003c/a\u003e Document tagging conventions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b46a0c9b8a4dd967fda8ec1a92f6437076bf262c\"\u003e\u003ccode\u003eb46a0c9\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/50629c851e61d887d5420452c311ec6203f1f400\"\u003e\u003ccode\u003e50629c8\u003c/code\u003e\u003c/a\u003e Update to PyPy 7.3.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/8522ebb71e5e9a6f7188af5f009f01785b8cf725\"\u003e\u003ccode\u003e8522ebb\u003c/code\u003e\u003c/a\u003e Preserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a37f3aff090ca342dc5f48304889963530b993f8\"\u003e\u003ccode\u003ea37f3af\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003eMISSING\u003c/code\u003e sentinel test to work with unreleased \u003ccode\u003etyping_extensions\u003c/code\u003e ver...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/909259a9df660518033aa686b689f045a6eaf9d2\"\u003e\u003ccode\u003e909259a\u003c/code\u003e\u003c/a\u003e Remove Logfire example in documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2c4174c366606fc2dc46cb806833a080aefa77df\"\u003e\u003ccode\u003e2c4174c\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.155 to 0.2.185\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.1 to 2.34.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cjriches\"\u003e\u003ccode\u003e@​cjriches\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7365\"\u003epsf/requests#7365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dsanader\"\u003e\u003ccode\u003e@​dsanader\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7376\"\u003epsf/requests#7376\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/DimitriPapadopoulos\"\u003e\u003ccode\u003e@​DimitriPapadopoulos\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7393\"\u003epsf/requests#7393\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshua-51\"\u003e\u003ccode\u003e@​joshua-51\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7416\"\u003epsf/requests#7416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/eggsort\"\u003e\u003ccode\u003e@​eggsort\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7421\"\u003epsf/requests#7421\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typhon8\"\u003e\u003ccode\u003e@​typhon8\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7315\"\u003epsf/requests#7315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7425\"\u003epsf/requests#7425\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2340-2026-05-11\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2340-2026-05-11\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/3816cfa1abd42dca21b9e837f26c59b246016aaf\"\u003e\u003ccode\u003e3816cfa\u003c/code\u003e\u003c/a\u003e Parameterize SupportsItems to handle Mapping key invariance (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7426\"\u003e#7426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b684dcb9bbf3aa557d1238e72062c4a29737dd1c\"\u003e\u003ccode\u003eb684dcb\u003c/code\u003e\u003c/a\u003e sessions: fix hooks type (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7425\"\u003e#7425\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/dc9dbdfb3434c6e58d48fd102f93e5342308817e\"\u003e\u003ccode\u003edc9dbdf\u003c/code\u003e\u003c/a\u003e Formalize 3.15 support (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/25340ebad09a38e0748aeb26232102022a03ec94\"\u003e\u003ccode\u003e25340eb\u003c/code\u003e\u003c/a\u003e Clear proxy env vars before every test run (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7423\"\u003e#7423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/fd628095d7b9ddbf3e987d8a4bf0e6062768916f\"\u003e\u003ccode\u003efd62809\u003c/code\u003e\u003c/a\u003e Preserve leading slashes in request path_url (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e8d2c015eecda8273612dd4562425e00cd164ba5\"\u003e\u003ccode\u003ee8d2c01\u003c/code\u003e\u003c/a\u003e docs: Fix missing hook output in docs example (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7421\"\u003e#7421\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/eb173bc819c72580deed2d54190d340cc769e529\"\u003e\u003ccode\u003eeb173bc\u003c/code\u003e\u003c/a\u003e Add 3.14t support to CI (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.1...v2.34.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.13.5 to 7.14.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.14.0 — 2026-05-10\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFeature: now when running one of the reporting commands, if there are\nparallel data files that need combining, they will be implicitly combined\nbefore creating the report. There is no option to avoid the combination; let\nus know if you have a use case that requires it.  Thanks, \u003ccode\u003eTim Hatch \u0026lt;pull 2162_\u0026gt;\u003c/code\u003e\u003cem\u003e. Closes \u003ccode\u003eissue 1781\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the output from \u003ccode\u003ecombine\u003c/code\u003e was too verbose, listing each file\nconsidered. Now it shows a single line with the counts of files combined,\nfiles skipped, and files with errors. The \u003ccode\u003e-q\u003c/code\u003e flag suppresses this line.\nThe old detailed lines are available with the new \u003ccode\u003e--debug=combine\u003c/code\u003e option.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: running a Python file through a symlink now sets the sys.path correctly,\nmatching regular Python behavior. Fixes \u003ccode\u003eissue 2157\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003eCollector.flush_data\u003c/code\u003e could fail with \u0026quot;RuntimeError: Set changed\nsize during iteration\u0026quot; when a tracer in another thread added a line to the\nper-file set that \u003ccode\u003eadd_lines\u003c/code\u003e (or \u003ccode\u003eadd_arcs\u003c/code\u003e) was iterating. The values\npassed to \u003ccode\u003eCoverageData\u003c/code\u003e are now snapshotted via \u003ccode\u003edict.copy()\u003c/code\u003e and\n\u003ccode\u003eset.copy()\u003c/code\u003e, which are atomic under the GIL. Thanks, \u003ccode\u003eAlex Vandiver \u0026lt;pull 2165_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the soft keyword \u003ccode\u003elazy\u003c/code\u003e is now bolded in HTML reports.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWe are no longer testing eventlet support. Eventlet started issuing stern\ndeprecation warnings that break our tests. Our support code is still there.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 1781: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/1781\"\u003ecoveragepy/coveragepy#1781\u003c/a\u003e\n.. _issue 2157: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2157\"\u003ecoveragepy/coveragepy#2157\u003c/a\u003e\n.. _pull 2162: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2162\"\u003ecoveragepy/coveragepy#2162\u003c/a\u003e\n.. _pull 2165: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2165\"\u003ecoveragepy/coveragepy#2165\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-13-5:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/646351b60429f1b5760af6c1b97b28483244a955\"\u003e\u003ccode\u003e646351b\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/39cd015505c8b04369c5b06e34fc22449a697370\"\u003e\u003ccode\u003e39cd015\u003c/code\u003e\u003c/a\u003e docs: prep for 7.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/649e8aa34af7d80c386ae82e8a3a6c9a3acb0dab\"\u003e\u003ccode\u003e649e8aa\u003c/code\u003e\u003c/a\u003e docs: thanks Alex Vandiver for \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2165\"\u003e#2165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/8cd392e3b5c4bc15d534aaec0c21714f9f518469\"\u003e\u003ccode\u003e8cd392e\u003c/code\u003e\u003c/a\u003e fix: snapshot data in Collector.flush_data to avoid threading race (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2165\"\u003e#2165\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c48e0edc2ebe44621b0053176e90f77b0c79bec1\"\u003e\u003ccode\u003ec48e0ed\u003c/code\u003e\u003c/a\u003e fix: less output for combining\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c2a3a284078556c911e0d9b6c6af1b7082a363ea\"\u003e\u003ccode\u003ec2a3a28\u003c/code\u003e\u003c/a\u003e docs: explain the change from \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2162\"\u003e#2162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1cd47aa6ac1da4e150da44055295d4e4f3a014e8\"\u003e\u003ccode\u003e1cd47aa\u003c/code\u003e\u003c/a\u003e fix: implicit combine-during-report now removes the combined data files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/2d99fd7696e0bccec8037479a4e45c1ecccb8058\"\u003e\u003ccode\u003e2d99fd7\u003c/code\u003e\u003c/a\u003e feat: automatically combine coverage in report, thanks Tim Hatch (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2162\"\u003e#2162\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/9fbdcdfee1c122fac43f1bf9a5e2d1f4d835f21c\"\u003e\u003ccode\u003e9fbdcdf\u003c/code\u003e\u003c/a\u003e fix: lazy soft keywords are bolded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/5de7d0267b9466d59995aaae1a7e707c8c6f66e7\"\u003e\u003ccode\u003e5de7d02\u003c/code\u003e\u003c/a\u003e build: oops, misplaced quote\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.13.5...7.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-order` 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-order/releases\"\u003epytest-order's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\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.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/43375ca14b7a9d50f8645700998dbe2fcd2bcbf5\"\u003e\u003ccode\u003e43375ca\u003c/code\u003e\u003c/a\u003e Release 1.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/0e1d1efc4fa45554fb4db517f12b07dd58ea7f6c\"\u003e\u003ccode\u003e0e1d1ef\u003c/code\u003e\u003c/a\u003e Added option --order-after-ff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/3c5f6f9b5944de8dad81342b38519ecca39e508e\"\u003e\u003ccode\u003e3c5f6f9\u003c/code\u003e\u003c/a\u003e Remove Python 3.9, add Python 3.14 to CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/66dd806fc07b9dd5db76185934f7cdf8b7e3a83a\"\u003e\u003ccode\u003e66dd806\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/6a76a9424a7c6eb5e3c9cac0acf3a5139ccbbd53\"\u003e\u003ccode\u003e6a76a94\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/87112f48676660eac77bac6856d97e5bdcd91653\"\u003e\u003ccode\u003e87112f4\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/4d84b464867c350a4d88d19437eeec90e741b2c8\"\u003e\u003ccode\u003e4d84b46\u003c/code\u003e\u003c/a\u003e Bump codecov/codecov-action from 5 to 6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/9933cf58aef484e2c5f4c6addaa6136d66865cd1\"\u003e\u003ccode\u003e9933cf5\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/f9c43a14905444a557e556d289854596031feccf\"\u003e\u003ccode\u003ef9c43a1\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/783c9b6b6ab8b0741cb39ae10351074e622a34d9\"\u003e\u003ccode\u003e783c9b6\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.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `chardet` from 5.2.0 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `dataproperty` from 1.1.0 to 1.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/thombashi/DataProperty/releases\"\u003edataproperty's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the actions-dependencies group across 1 directory with 6 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/thombashi/DataProperty/pull/65\"\u003ethombashi/DataProperty#65\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/DataProperty/pull/66\"\u003ethombashi/DataProperty#66\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003etypepy\u003c/code\u003e version constraint to \u0026lt;3  by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/DataProperty/pull/67\"\u003ethombashi/DataProperty#67\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/thombashi/DataProperty/pull/65\"\u003ethombashi/DataProperty#65\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/thombashi/DataProperty/compare/v1.1.0...v1.1.1\"\u003ehttps://github.com/thombashi/DataProperty/compare/v1.1.0...v1.1.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/e3f5cc0acd857ef68e245b3e52cfa105640784bd\"\u003e\u003ccode\u003ee3f5cc0\u003c/code\u003e\u003c/a\u003e Bump version to 1.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/da381f606e06572d990cd22f69fb02ae6a7c1892\"\u003e\u003ccode\u003eda381f6\u003c/code\u003e\u003c/a\u003e Update copyright year\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/efc5495a99eb2fc57e407d959fdf5e4db716b5a7\"\u003e\u003ccode\u003eefc5495\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/DataProperty/issues/67\"\u003e#67\u003c/a\u003e from thombashi/update_requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/5fb50822fb3d7298d5f7333b3dcce9aa7c9f4eb0\"\u003e\u003ccode\u003e5fb5082\u003c/code\u003e\u003c/a\u003e Update docs_requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/b80bc1948267ce37b1df9af03f0390f603a6a499\"\u003e\u003ccode\u003eb80bc19\u003c/code\u003e\u003c/a\u003e Update typepy[datetime] version constraint to \u0026lt;3 in requirements.txt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/b29d3f27b5cec4558c1970f0c82f4236727c679d\"\u003e\u003ccode\u003eb29d3f2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/DataProperty/issues/66\"\u003e#66\u003c/a\u003e from thombashi/add_python314_support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/6396dfdf762b3b859e3ae20ba17fdd8996135b9f\"\u003e\u003ccode\u003e6396dfd\u003c/code\u003e\u003c/a\u003e Apply formatter\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/a80abdedf6fa0a0e910365e2e3eb57642a54b9f5\"\u003e\u003ccode\u003ea80abde\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/962844c405235c7812ad26d15932a2a5bd73242c\"\u003e\u003ccode\u003e962844c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/DataProperty/issues/65\"\u003e#65\u003c/a\u003e from thombashi/dependabot/github_actions/actions-depen...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/8bb29c272df8d5622c38e56ca6a910b1372b45df\"\u003e\u003ccode\u003e8bb29c2\u003c/code\u003e\u003c/a\u003e Bump the actions-dependencies group across 1 directory with 6 updates\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/thombashi/DataProperty/compare/v1.1.0...v1.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.13 to 3.14\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.rst\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e3.14 (2026-05-10)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved opportunity to process long inputs into quadratic\ntime by rejecting oversize inputs up-front. Closes a bypass\nof the CVE-2024-3651 mitigation. [GHSA-65pc-fj4g-8rjx]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Stan Ulbrych for reporting the issue.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/37b6b7497aee4805f7a74a7d86206ac05be9669a\"\u003e\u003ccode\u003e37b6b74\u003c/code\u003e\u003c/a\u003e Release v3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/628fef84d3eda59321c21127e73dcd873db23ead\"\u003e\u003ccode\u003e628fef8\u003c/code\u003e\u003c/a\u003e Use valid_string_length() for early oversized-input check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1e26c7fd93c67995422af9d1f071f45ee6433fd0\"\u003e\u003ccode\u003e1e26c7f\u003c/code\u003e\u003c/a\u003e Tweak release wording\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/ab5668fb6eaf4254d91d6993c0b23e98e21202fb\"\u003e\u003ccode\u003eab5668f\u003c/code\u003e\u003c/a\u003e Pre-release 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c0dda4501df5d91c3181ce6f962dc5de74e82cc1\"\u003e\u003ccode\u003ec0dda45\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/b7391f4c240bf2eae80eaed0a2ef7c2e0496af96\"\u003e\u003ccode\u003eb7391f4\u003c/code\u003e\u003c/a\u003e Add docstrings to package (\u003ca href=\"https://redirect.github.com/kjd/idna/issues/226\"\u003e#226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/0f4a28d88f8cce54269f0b6a42edf5e6a5424319\"\u003e\u003ccode\u003e0f4a28d\u003c/code\u003e\u003c/a\u003e Raise IDNAError on non-string input to encode/decode (\u003ca href=\"https://redirect.github.com/kjd/idna/issues/224\"\u003e#224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/7e6df7196e6396b5b84b9530eab8272b5ad51898\"\u003e\u003ccode\u003e7e6df71\u003c/code\u003e\u003c/a\u003e Address type issues found by \u003ccode\u003ety\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/kjd/idna/issues/225\"\u003e#225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/6ebfaab9ea718dce38a7c17ddafd7fb28b0468d4\"\u003e\u003ccode\u003e6ebfaab\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/221\"\u003e#221\u003c/a\u003e from kjd/release-3.13\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/kjd/idna/compare/v3.13...v3.14\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mbstrdecoder` from 1.1.4 to 1.1.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/thombashi/mbstrdecoder/releases\"\u003embstrdecoder's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.1.5\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.9 and add support for Python 3.14 by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/mbstrdecoder/pull/16\"\u003ethombashi/mbstrdecoder#16\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport chardet 6: \u003ca href=\"https://redirect.github.com/thombashi/mbstrdecoder/issues/14\"\u003e#14\u003c/a\u003e (Thanks to \u003ca href=\"https://github.com/musicinmybrain\"\u003e\u003ccode\u003e@​musicinmybrain\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/thombashi/mbstrdecoder/compare/v1.1.4...v1.1.5\"\u003ehttps://github.com/thombashi/mbstrdecoder/compare/v1.1.4...v1.1.5\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/mbstrdecoder/commit/844a2974c988f196740bfe13575d168510e007f2\"\u003e\u003ccode\u003e844a297\u003c/code\u003e\u003c/a\u003e Bump version to 1.1.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/mbstrdecoder/commit/c36f1fcb7e17240de05160930a8676aabe4ba55b\"\u003e\u003ccode\u003ec36f1fc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/mbstrdecoder/issues/16\"\u003e#16\u003c/a\u003e from thombashi/support-py314-drop-py39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/mbstrdecoder/commit/8b2ddbfe521ba32299d90f1cd42333fe604c3027\"\u003e\u003ccode\u003e8b2ddbf\u003c/code\u003e\u003c/a\u003e Drop support for Python 3.9 and add support for Python 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/mbstrdecoder/commit/c7973334b72d7ef7113aa5e23eda20bcf25d922d\"\u003e\u003ccode\u003ec797333\u003c/code\u003e\u003c/a\u003e Update chardet version constraint to allow versions below 7\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/thombashi/mbstrdecoder/compare/v1.1.4...v1.1.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytz` from 2026.1.post1 to 2026.2\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/stub42/pytz/commit/45957c55be9dbf013b636aeb7d22dc7bec81a9f4\"\u003e\u003ccode\u003e45957c5\u003c/code\u003e\u003c/a\u003e Bump github actions/checkout to \u003ca href=\"https://github.com/v6\"\u003e\u003ccode\u003e@​v6\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/stub42/pytz/commit/8e927c67c98ccde3624642f2f32cd6c5208a5161\"\u003e\u003ccode\u003e8e927c6\u003c/code\u003e\u003c/a\u003e Bump version numbers to 2026.2 (IANA 2026b)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/stub42/pytz/commit/6f08adec7bcb382e78afedb660f94f38a093fddf\"\u003e\u003ccode\u003e6f08ade\u003c/code\u003e\u003c/a\u003e IANA 2026b\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/stub42/pytz/commit/edbfbdf8f708657ce5b9fee32e2f8eaa8647359a\"\u003e\u003ccode\u003eedbfbdf\u003c/code\u003e\u003c/a\u003e Squashed 'tz/' changes from dd6be6d155..8be0d5483d\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/stub42/pytz/commit/a148b0390a42ea9a95ef7f6d8c346307405708d5\"\u003e\u003ccode\u003ea148b03\u003c/code\u003e\u003c/a\u003e Fix typo in README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/stub42/pytz/commit/b841195f5df79455ee3aa9ec3d8749af835dab48\"\u003e\u003ccode\u003eb841195\u003c/code\u003e\u003c/a\u003e fix typo\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/stub42/pytz/compare/release_2026.1.post1...release_2026.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tabledata` from 1.3.4 to 1.3.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/thombashi/tabledata/releases\"\u003etabledata's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.5\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the actions-dependencies group across 1 directory with 6 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/thombashi/tabledata/pull/8\"\u003ethombashi/tabledata#8\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 and add support for Python 3.14 by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/tabledata/pull/9\"\u003ethombashi/tabledata#9\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate requirements by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/tabledata/pull/10\"\u003ethombashi/tabledata#10\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the error messages of the \u003ccode\u003eTableData.validate_rows\u003c/code\u003e method\u003c/li\u003e\n\u003cli\u003eFix a type annotation of the \u003ccode\u003eTableData.filter_column\u003c/code\u003e method\u003c/li\u003e\n\u003cli\u003eFix equality comparison in TableData to handle NaN values correctly\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/thombashi/tabledata/pull/8\"\u003ethombashi/tabledata#8\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/thombashi/tabledata/compare/v1.3.4...v1.3.5\"\u003ehttps://github.com/thombashi/tabledata/compare/v1.3.4...v1.3.5\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/09e26a968af42a404e0b86b21596922b774f8942\"\u003e\u003ccode\u003e09e26a9\u003c/code\u003e\u003c/a\u003e Bump version to 1.3.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/10cf6635129960103edd9c4018dd656ff919b274\"\u003e\u003ccode\u003e10cf663\u003c/code\u003e\u003c/a\u003e Update copyright year\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/3994ac9c12d09a6c331464aa34ac4ffe06ab3a94\"\u003e\u003ccode\u003e3994ac9\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/tabledata/issues/11\"\u003e#11\u003c/a\u003e from thombashi/drop-py39-add-py314\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/275348ed3a9fc9d1ee042b53b5023e6fdb60c831\"\u003e\u003ccode\u003e275348e\u003c/code\u003e\u003c/a\u003e Fix equality comparison in TableData to handle NaN values correctly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/14d166529cd6ab7f7c938ec8a114153cc07ea1eb\"\u003e\u003ccode\u003e14d1665\u003c/code\u003e\u003c/a\u003e Fix a type annotation of the TableData.filter_column method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/b9ae41bf498b17055fb576045e376f64c4b9323f\"\u003e\u003ccode\u003eb9ae41b\u003c/code\u003e\u003c/a\u003e Fix the error messages of the TableData.validate_rows method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/78b795a15b5bec80a13c4c981f6b19b9ddc58aba\"\u003e\u003ccode\u003e78b795a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/tabledata/issues/10\"\u003e#10\u003c/a\u003e from thombashi/update_requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/cbcfef4bcd47411ae72b157849a38c4d6388404e\"\u003e\u003ccode\u003ecbcfef4\u003c/code\u003e\u003c/a\u003e Update requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/0d5ab3df9c92f252fa650a22c1b7e6c9660ac10e\"\u003e\u003ccode\u003e0d5ab3d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/tabledata/issues/9\"\u003e#9\u003c/a\u003e from thombashi/drop-py39-add-py314\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/e0d41582b3b9a5f70ccd35a30b8bbb60703c6f70\"\u003e\u003ccode\u003ee0d4158\u003c/code\u003e\u003c/a\u003e Drop support for Python 3.9 and add support for Python 3.14\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/thombashi/tabledata/compare/v1.3.4...v1.3.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typepy` from 1.3.4 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/thombashi/typepy/releases\"\u003etypepy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pytz with ZoneInfo + misc datetime fixes by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/typepy/pull/13\"\u003ethombashi/typepy#13\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/thombashi/typepy/pull/13\"\u003ethombashi/typepy#13\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/thombashi/typepy/compare/v1.3.5...v2.0.0\"\u003ehttps://github.com/thombashi/typepy/compare/v1.3.5...v2.0.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.3.5\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the actions-dependencies group across 1 directory with 6 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/thombashi/typepy/pull/9\"\u003ethombashi/typepy#9\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed an invalid input handle for DateTimeConverter by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/typepy/pull/10\"\u003ethombashi/typepy#10\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/typepy/pull/11\"\u003ethombashi/typepy#11\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix logic issues in type checking and conversion functions by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/typepy/pull/12\"\u003ethombashi/typepy#12\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/thombashi/typepy/compare/v1.3.4...v1.3.5\"\u003ehttps://github.com/thombashi/typepy/compare/v1.3.4...v1.3.5\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/2d7ed7069bd74696433a27ddabdac2feb77c246d\"\u003e\u003ccode\u003e2d7ed70\u003c/code\u003e\u003c/a\u003e Bump version to 2.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/f65a5b32b36d442c5af211b17d4f9b85d2a269ac\"\u003e\u003ccode\u003ef65a5b3\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/typepy/issues/13\"\u003e#13\u003c/a\u003e from JYOuyang/jyo-tz\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/dd5f44864053920820946f8abf00b57037136186\"\u003e\u003ccode\u003edd5f448\u003c/code\u003e\u003c/a\u003e setup.py: PEP 508 env marker to install tzdata if on Windows.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/c702aa0d7ce8257d249a034a7f52337c5aa38446\"\u003e\u003ccode\u003ec702aa0\u003c/code\u003e\u003c/a\u003e Replace pytz with ZoneInfo + misc datetime fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/92958dc4094188387319538bb8ee9f313b36aa43\"\u003e\u003ccode\u003e92958dc\u003c/code\u003e\u003c/a\u003e Bump version to 1.3.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/d514e7629c552d98e831fc53b28c64b9373711cf\"\u003e\u003ccode\u003ed514e76\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/typepy/issues/12\"\u003e#12\u003c/a\u003e from thombashi/fix-logic-issues\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/4692c23ce14051a96124fd8af46c1ff4db2b3eaa\"\u003e\u003ccode\u003e4692c23\u003c/code\u003e\u003c/a\u003e Fix logic issues in type checking and conversion functions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/de7043ee844f7cc80bb370cdf4343fd5c6a526a3\"\u003e\u003ccode\u003ede7043e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/typepy/issues/11\"\u003e#11\u003c/a\u003e from thombashi/add-py314\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/998a550231692b11732c3deb39a61ba0e2c672c8\"\u003e\u003ccode\u003e998a550\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/8d4fad51df1008c8cdad35a5fe375ab820b0fd1a\"\u003e\u003ccode\u003e8d4fad5\u003c/code\u003e\u003c/a\u003e Add permissions section to GitHub Actions workflow\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/thombashi/typepy/compare/v1.3.4...v2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `urllib3` from 2.6.3 to 2.7.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/urllib3/urllib3/releases\"\u003eurllib3's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7.0\u003c/h2\u003e\n\u003ch2\u003e🚀 urllib3 is fundraising for HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support\"\u003eurllib3 is raising ~$40,000 USD\u003c/a\u003e to release HTTP/2 support and ensure long-term sustainable maintenance of the project after a sharp decline in financial support. If your company or organization uses Python and would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and thousands of other projects \u003ca href=\"https://opencollective.com/urllib3\"\u003eplease consider contributing financially\u003c/a\u003e to ensure HTTP/2 support is developed sustainably and maintained for the long-haul.\u003c/p\u003e\n\u003cp\u003eThank you for your support.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eAddressed high-severity security issues. Impact was limited to specific use cases detailed in the accompanying advisories; overall user exposure was estimated to be marginal.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDecompression-bomb safeguards of the streaming API were bypassed:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWhen \u003ccode\u003eHTTPResponse.drain_conn()\u003c/code\u003e was called after the response had been read and decompressed partially. (Reported by \u003ca href=\"https://github.com/Cycloctane\"\u003e\u003ccode\u003e@​Cycloctane\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDuring the second \u003ccode\u003eHTTPResponse.read(amt=N)\u003c/code\u003e or \u003ccode\u003eHTTPResponse.stream(amt=N)\u003c/code\u003e call when the response was decompressed using the official \u003ca href=\"https://pypi.org/project/brotli/\"\u003eBrotli\u003c/a\u003e library. (Reported by \u003ca href=\"https://github.com/kimkou2024\"\u003e\u003ccode\u003e@​kimkou2024\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSee GHSA-mf9v-mfxr-j63j for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHTTP pools created using \u003ccode\u003eProxyManager.connection_from_url\u003c/code\u003e did not strip sensitive headers specified in \u003ccode\u003eRetry.remove_headers_on_redirect\u003c/code\u003e when redirecting to a different host. (GHSA-qccp-gfcp-xxvc reported by \u003ca href=\"https://github.com/christos-spearbit\"\u003e\u003ccode\u003e@​christos-spearbit\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUsed \u003ccode\u003eFutureWarning\u003c/code\u003e instead of \u003ccode\u003eDeprecationWarning\u003c/code\u003e for better visibility of existing deprecation notices. Rescheduled the removal of deprecated features to version 3.0. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3763\"\u003eurllib3/urllib3#3763\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life Python 3.9. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3720\"\u003eurllib3/urllib3#3720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life PyPy3.10. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4979\"\u003eurllib3/urllib3#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum supported pyOpenSSL version to 19.0.0. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3777\"\u003eurllib3/urllib3#3777\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read(amt=None)\u003c/code\u003e was ignoring decompressed data buffered from previous partial reads. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3636\"\u003eurllib3/urllib3#3636\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read()\u003c/code\u003e could cache only part of the response after a partial read when \u003ccode\u003ecache_content=True\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4967\"\u003eurllib3/urllib3#4967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eHTTPResponse.stream()\u003c/code\u003e and \u003ccode\u003eHTTPResponse.read_chunked()\u003c/code\u003e to handle \u003ccode\u003eamt=0\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3793\"\u003eurllib3/urllib3#3793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003e_TYPE_BODY\u003c/code\u003e type alias to include missing \u003ccode\u003eIterable[str]\u003c/code\u003e, matching the documented and runtime behavior of chunked request bodies. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3798\"\u003eurllib3/urllib3#3798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eLocationParseError\u003c/code\u003e when paths resembling schemeless URIs were passed to \u003ccode\u003eHTTPConnectionPool.urlopen()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3352\"\u003eurllib3/urllib3#3352\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eBaseHTTPResponse.readinto()\u003c/code\u003e type annotation to accept \u003ccode\u003ememoryview\u003c/code\u003e in addition to \u003ccode\u003ebytearray\u003c/code\u003e, matching the \u003ccode\u003eio.RawIOBase.readinto\u003c/code\u003e contract and enabling use with \u003ccode\u003eio.BufferedReader\u003c/code\u003e without type errors. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3764\"\u003eurllib3/urllib3#3764\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/urllib3/urllib3/blob/main/CHANGES.rst\"\u003eurllib3's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.7.0 (2026-05-07)\u003c/h1\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eAddressed high-severity security issues.\nImpact was limited to specific use cases detailed in the accompanying\nadvisories; overall user exposure was estimated to be marginal.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDecompression-bomb safeguards of the streaming API were bypassed:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWhen \u003ccode\u003eHTTPResponse.drain_conn()\u003c/code\u003e was called after the response had been\nread and decompressed partially.\u003c/li\u003e\n\u003cli\u003eDuring the second \u003ccode\u003eHTTPResponse.read(amt=N)\u003c/code\u003e or\n\u003ccode\u003eHTTPResponse.stream(amt=N)\u003c/code\u003e call when the response was decompressed\nusing the official \u003ccode\u003eBrotli \u0026lt;https://pypi.org/project/brotli/\u0026gt;\u003c/code\u003e__ library.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSee \u003ccode\u003eGHSA-mf9v-mfxr-j63j \u0026lt;https://github.com/urllib3/urllib3/security/advisories/GHSA-mf9v-mfxr-j63j\u0026gt;\u003c/code\u003e__\nfor details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHTTP pools created using \u003ccode\u003eProxyManager.connection_from_url\u003c/code\u003e did not strip\nsensitive headers specified in \u003ccode\u003eRetry.remove_headers_on_redirect\u003c/code\u003e when\nredirecting to a different host.\n(\u003ccode\u003eGHSA-qccp-gfcp-xxvc \u0026lt;https://github.com/urllib3/urllib3/security/advisories/GHSA-qccp-gfcp-xxvc\u0026gt;\u003c/code\u003e__)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUsed \u003ccode\u003eFutureWarning\u003c/code\u003e instead of \u003ccode\u003eDeprecationWarning\u003c/code\u003e for better\nvisibility of existing deprecation notices. Rescheduled the removal of\ndeprecated features to version 3.0.\n(\u003ccode\u003e[#3763](https://github.com/urllib3/urllib3/issues/3763) \u0026lt;https://github.com/urllib3/urllib3/issues/3763\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life Python 3.9.\n(\u003ccode\u003e[#3720](https://github.com/urllib3/urllib3/issues/3720) \u0026lt;https://github.com/urllib3/urllib3/issues/3720\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life PyPy3.10.\n(\u003ccode\u003e[#4979](https://github.com/urllib3/urllib3/issues/4979) \u0026lt;https://github.com/urllib3/urllib3/issues/4979\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eBumped the minimum supported pyOpenSSL version to 19.0.0.\n(\u003ccode\u003e[#3777](https://github.com/urllib3/urllib3/issues/3777) \u0026lt;https://github.com/urllib3/urllib3/issues/3777\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read(amt=None)\u003c/code\u003e was ignoring decompressed\ndata buffered from previous partial reads.\n(\u003ccode\u003e[#3636](https://github.com/urllib3/urllib3/issues/3636) \u0026lt;https://github.com/urllib3/urllib3/issues/3636\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read()\u003c/code\u003e could cache only part of the\nresponse after a partial read when \u003ccode\u003ecache_content=True\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/9a950b92d999f906b6020bb2d1076ee56cddd5d2\"\u003e\u003ccode\u003e9a950b9\u003c/code\u003e\u003c/a\u003e Release 2.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/5ec0de499b9166ca71c65ab04f2a7e4eb0d66fcc\"\u003e\u003ccode\u003e5ec0de4\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n...\n\n_Description has been truncated_","html_url":"https://github.com/tektronix/tm_data_types/pull/181","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tektronix%2Ftm_data_types/issues/181","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/181/packages"},{"uuid":"4415987272","node_id":"PR_kwDOSL5hwc7aAlI2","number":2,"state":"open","title":"deps(backend): bump the python-minor group in /apps/backend with 46 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-10T15:14:09.000Z","updated_at":"2026-05-10T15:14:10.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(backend): bump","group_name":"python-minor","update_count":46,"packages":[{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"chardet","old_version":"7.4.1","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"click","old_version":"8.1.8","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"},{"name":"exceptiongroup","old_version":"1.2.2","new_version":"1.3.1","repository_url":"https://github.com/agronholm/exceptiongroup"},{"name":"fsspec","old_version":"2026.3.0","new_version":"2026.4.0","repository_url":"https://github.com/fsspec/filesystem_spec"},{"name":"googleapis-common-protos","old_version":"1.74.0","new_version":"1.75.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"jsonschema","old_version":"4.25.1","new_version":"4.26.0","repository_url":"https://github.com/python-jsonschema/jsonschema"},{"name":"langchain-classic","old_version":"1.0.3","new_version":"1.0.7","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-text-splitters","old_version":"1.1.1","new_version":"1.1.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langgraph-checkpoint","old_version":"4.0.1","new_version":"4.0.3","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langgraph-prebuilt","old_version":"1.0.9","new_version":"1.0.13","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langgraph-sdk","old_version":"0.3.13","new_version":"0.3.14","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langsmith","old_version":"0.7.30","new_version":"0.8.3","repository_url":"https://github.com/langchain-ai/langsmith-sdk"},{"name":"mako","old_version":"1.3.10","new_version":"1.3.12","repository_url":"https://github.com/sqlalchemy/mako"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"mcp","old_version":"1.23.3","new_version":"1.27.1","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"mpmath","old_version":"1.3.0","new_version":"1.4.1","repository_url":"https://github.com/mpmath/mpmath"},{"name":"ollama","old_version":"0.6.1","new_version":"0.6.2","repository_url":"https://github.com/ollama/ollama-python"},{"name":"opentelemetry-api","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-threading","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-sdk","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"orjson","old_version":"3.11.8","new_version":"3.11.9","repository_url":"https://github.com/ijl/orjson"},{"name":"packaging","old_version":"26.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pathspec","old_version":"1.0.4","new_version":"1.1.1","repository_url":"https://github.com/cpburnz/python-pathspec"},{"name":"propcache","old_version":"0.4.1","new_version":"0.5.2","repository_url":"https://github.com/aio-libs/propcache"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.46.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pytz","old_version":"2026.1.post1","new_version":"2026.2","repository_url":"https://github.com/stub42/pytz"},{"name":"regex","old_version":"2026.4.4","new_version":"2026.5.9","repository_url":"https://github.com/mrabarnett/mrab-regex"},{"name":"ruamel-yaml-clib","old_version":"0.2.14","new_version":"0.2.15"},{"name":"sse-starlette","old_version":"3.3.4","new_version":"3.4.2","repository_url":"https://github.com/sysid/sse-starlette"},{"name":"tokenizers","old_version":"0.22.2","new_version":"0.23.1","repository_url":"https://github.com/huggingface/tokenizers"},{"name":"tomli","old_version":"2.0.2","new_version":"2.4.1","repository_url":"https://github.com/hukkin/tomli"},{"name":"torch","old_version":"2.10.0","new_version":"2.11.0","repository_url":"https://github.com/pytorch/pytorch"},{"name":"tzdata","old_version":"2026.1","new_version":"2026.2","repository_url":"https://github.com/python/tzdata"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"wcwidth","old_version":"0.6.0","new_version":"0.7.0","repository_url":"https://github.com/jquast/wcwidth"},{"name":"xxhash","old_version":"3.6.0","new_version":"3.7.0","repository_url":"https://github.com/ifduyue/python-xxhash"},{"name":"zipp","old_version":"3.23.0","new_version":"3.23.1","repository_url":"https://github.com/jaraco/zipp"}],"path":"/apps/backend","ecosystem":"pip"},"body":"Bumps the python-minor group in /apps/backend with 46 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.4.22` |\n| [chardet](https://github.com/chardet/chardet) | `7.4.1` | `7.4.3` |\n| [click](https://github.com/pallets/click) | `8.1.8` | `8.3.3` |\n| [exceptiongroup](https://github.com/agronholm/exceptiongroup) | `1.2.2` | `1.3.1` |\n| [fsspec](https://github.com/fsspec/filesystem_spec) | `2026.3.0` | `2026.4.0` |\n| [googleapis-common-protos](https://github.com/googleapis/google-cloud-python) | `1.74.0` | `1.75.0` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.13` |\n| [jsonschema](https://github.com/python-jsonschema/jsonschema) | `4.25.1` | `4.26.0` |\n| [langchain-classic](https://github.com/langchain-ai/langchain) | `1.0.3` | `1.0.7` |\n| [langchain-text-splitters](https://github.com/langchain-ai/langchain) | `1.1.1` | `1.1.2` |\n| [langgraph-checkpoint](https://github.com/langchain-ai/langgraph) | `4.0.1` | `4.0.3` |\n| [langgraph-prebuilt](https://github.com/langchain-ai/langgraph) | `1.0.9` | `1.0.13` |\n| [langgraph-sdk](https://github.com/langchain-ai/langgraph) | `0.3.13` | `0.3.14` |\n| [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.7.30` | `0.8.3` |\n| [mako](https://github.com/sqlalchemy/mako) | `1.3.10` | `1.3.12` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.23.3` | `1.27.1` |\n| [mpmath](https://github.com/mpmath/mpmath) | `1.3.0` | `1.4.1` |\n| [ollama](https://github.com/ollama/ollama-python) | `0.6.1` | `0.6.2` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-instrumentation-threading](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.58b0` | `0.62b1` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [orjson](https://github.com/ijl/orjson) | `3.11.8` | `3.11.9` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.2` |\n| [pathspec](https://github.com/cpburnz/python-pathspec) | `1.0.4` | `1.1.1` |\n| [propcache](https://github.com/aio-libs/propcache) | `0.4.1` | `0.5.2` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.46.4` |\n| [pytz](https://github.com/stub42/pytz) | `2026.1.post1` | `2026.2` |\n| [regex](https://github.com/mrabarnett/mrab-regex) | `2026.4.4` | `2026.5.9` |\n| ruamel-yaml-clib | `0.2.14` | `0.2.15` |\n| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.3.4` | `3.4.2` |\n| [tokenizers](https://github.com/huggingface/tokenizers) | `0.22.2` | `0.23.1` |\n| [tomli](https://github.com/hukkin/tomli) | `2.0.2` | `2.4.1` |\n| [torch](https://github.com/pytorch/pytorch) | `2.10.0` | `2.11.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.1` | `2026.2` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.6.0` | `0.7.0` |\n| [xxhash](https://github.com/ifduyue/python-xxhash) | `3.6.0` | `3.7.0` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.0` | `3.23.1` |\n\nUpdates `certifi` from 2026.2.25 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/0a49067eb434e53e1f8df5f7707d5dc05ef9def4\"\u003e\u003ccode\u003e0a49067\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/403\"\u003e#403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/acf6ce8e39e3b125f4349e11904295e4fe4c1bed\"\u003e\u003ccode\u003eacf6ce8\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/feb0ed26163a9417ea0fb8eb52d47e79fcf202ab\"\u003e\u003ccode\u003efeb0ed2\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7.0.0 to 8.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/397\"\u003e#397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d9c11a50369cc377abb40f7909ded3d6da4d98a3\"\u003e\u003ccode\u003ed9c11a5\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6.0.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/396\"\u003e#396\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.04.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `chardet` from 7.4.1 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.1.8 to 8.3.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.3.3\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.3 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.3.3/\"\u003ehttps://pypi.org/project/click/8.3.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-3\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-3\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/1026\"\u003e#1026\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1477\"\u003e#1477\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2775\"\u003e#2775\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3298\"\u003e#3298\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3299\"\u003e#3299\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3238\"\u003e#3238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3224\"\u003e#3224\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/654\"\u003e#654\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/824\"\u003e#824\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/843\"\u003e#843\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/951\"\u003e#951\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3235\"\u003e#3235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3177\"\u003e#3177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2836\"\u003e#2836\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2837\"\u003e#2837\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3165\"\u003e#3165\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3262\"\u003e#3262\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3280\"\u003e#3280\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3111\"\u003e#3111\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3189\"\u003e#3189\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3250\"\u003e#3250\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2865\"\u003e#2865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2879\"\u003e#2879\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.3.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.3.2/\"\u003ehttps://pypi.org/project/click/8.3.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/29\"\u003ehttps://github.com/pallets/click/milestone/29\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.rst\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.3.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-20\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n:issue:\u003ccode\u003e1026\u003c/code\u003e :pr:\u003ccode\u003e1477\u003c/code\u003e :pr:\u003ccode\u003e2775\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. :issue:\u003ccode\u003e3298\u003c/code\u003e :pr:\u003ccode\u003e3299\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. :pr:\u003ccode\u003e3238\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n:issue:\u003ccode\u003e3224\u003c/code\u003e :pr:\u003ccode\u003e3240\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n:issue:\u003ccode\u003e654\u003c/code\u003e :issue:\u003ccode\u003e824\u003c/code\u003e :issue:\u003ccode\u003e843\u003c/code\u003e :pr:\u003ccode\u003e951\u003c/code\u003e :pr:\u003ccode\u003e3235\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. :pr:\u003ccode\u003e3151\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. :pr:\u003ccode\u003e3151\u003c/code\u003e :pr:\u003ccode\u003e3177\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. :issue:\u003ccode\u003e2836\u003c/code\u003e :pr:\u003ccode\u003e2837\u003c/code\u003e :pr:\u003ccode\u003e3165\u003c/code\u003e :pr:\u003ccode\u003e3262\u003c/code\u003e :pr:\u003ccode\u003e3280\u003c/code\u003e\n:pr:\u003ccode\u003e3328\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. :issue:\u003ccode\u003e3111\u003c/code\u003e :pr:\u003ccode\u003e3239\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. :issue:\u003ccode\u003e3189\u003c/code\u003e :pr:\u003ccode\u003e3250\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n:issue:\u003ccode\u003e2865\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. :issue:\u003ccode\u003e2879\u003c/code\u003e :pr:\u003ccode\u003e3248\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.3.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-02\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eflag_value\u003c/code\u003e when \u003ccode\u003eis_flag=False\u003c/code\u003e to allow such options to be\nused without an explicit value. :issue:\u003ccode\u003e3084\u003c/code\u003e :pr:\u003ccode\u003e3152\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eHide \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values as \u003ccode\u003eNone\u003c/code\u003e when using \u003ccode\u003elookup_default()\u003c/code\u003e.\n:issue:\u003ccode\u003e3136\u003c/code\u003e :pr:\u003ccode\u003e3199\u003c/code\u003e :pr:\u003ccode\u003e3202\u003c/code\u003e :pr:\u003ccode\u003e3209\u003c/code\u003e :pr:\u003ccode\u003e3212\u003c/code\u003e :pr:\u003ccode\u003e3224\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c06d2d0a6aee6bcc50bd8257be2a4a592f4e75d0\"\u003e\u003ccode\u003ec06d2d0\u003c/code\u003e\u003c/a\u003e Release 8.3.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/f1f191ecd2c790b161187c78e7c88440e9524e5c\"\u003e\u003ccode\u003ef1f191e\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3343\"\u003e#3343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bb59ba0fd279ca085d1113f0499b6a602ca31081\"\u003e\u003ccode\u003ebb59ba0\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/4a352253c9ff013e36d11e4a6820d36d00ff2cd4\"\u003e\u003ccode\u003e4a35225\u003c/code\u003e\u003c/a\u003e Reduce blast-radius of \u003ccode\u003eUNSET\u003c/code\u003e in \u003ccode\u003edefault_map\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c07bb936de43fd303f9cfbefe248ab23fd2199c8\"\u003e\u003ccode\u003ec07bb93\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into unset-in-default-map\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c7e1ba8448cbcb2cdd9c1c7f4a592e863dcc3995\"\u003e\u003ccode\u003ec7e1ba8\u003c/code\u003e\u003c/a\u003e Reorder \u003ccode\u003eParameterSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/76552ff1e8c85837f911fc34037e702ae4327eda\"\u003e\u003ccode\u003e76552ff\u003c/code\u003e\u003c/a\u003e Show default string in prompt (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/ac5cec5fe54e5a691e7bac17f441ce9498e0744c\"\u003e\u003ccode\u003eac5cec5\u003c/code\u003e\u003c/a\u003e Reorder ParameterSource from most to least explicit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c452e00e6772931b7071d9316b82b77e5b8f280\"\u003e\u003ccode\u003e8c452e0\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into show-default-string-in-prompt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c95c73bd5ef89eac638f85f1904a104ba4b1a32\"\u003e\u003ccode\u003e8c95c73\u003c/code\u003e\u003c/a\u003e Reconcile default value passing and default activation (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.1.8...8.3.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `exceptiongroup` from 1.2.2 to 1.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/exceptiongroup/releases\"\u003eexceptiongroup's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.3.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eAttributeError: 'TracebackException' object has no attribute 'exceptions'\u003c/code\u003e when formatting unpickled TBEs from another Python process which did not apply the \u003ccode\u003eexceptiongroup\u003c/code\u003e patches (\u003ca href=\"https://redirect.github.com/agronholm/exceptiongroup/issues/144\"\u003e#144\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.3.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003e**kwargs\u003c/code\u003e to function and method signatures as appropriate to match the signatures in the standard library\u003c/li\u003e\n\u003cli\u003eIn line with the stdlib typings in typeshed, updated \u003ccode\u003e(Base)ExceptionGroup\u003c/code\u003e generic types to define defaults for their generic arguments (defaulting to \u003ccode\u003eBaseExceptionGroup[BaseException]\u003c/code\u003e and \u003ccode\u003eExceptionGroup[Exception]\u003c/code\u003e) (PR by \u003ca href=\"https://github.com/mikenerone\"\u003e\u003ccode\u003e@​mikenerone\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eBaseExceptionGroup.__init__()\u003c/code\u003e to directly call \u003ccode\u003eBaseException.__init__()\u003c/code\u003e instead of the superclass \u003ccode\u003e__init__()\u003c/code\u003e in order to emulate the CPython behavior (broken or not) (PR by \u003ca href=\"https://github.com/cfbolz\"\u003e\u003ccode\u003e@​cfbolz\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged the \u003ccode\u003eexceptions\u003c/code\u003e attribute to always return the same tuple of exceptions, created from the original exceptions sequence passed to \u003ccode\u003eBaseExceptionGroup\u003c/code\u003e to match CPython behavior (\u003ca href=\"https://redirect.github.com/agronholm/exceptiongroup/issues/143\"\u003e#143\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/exceptiongroup/blob/main/CHANGES.rst\"\u003eexceptiongroup's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eVersion history\u003c/h1\u003e\n\u003cp\u003eThis library adheres to \u003ccode\u003eSemantic Versioning 2.0 \u0026lt;http://semver.org/\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eUNRELEASED\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed the \u003ccode\u003erepr()\u003c/code\u003e of exception groups being affected by mutation of the\noriginal exception sequence after construction\n(\u003ccode\u003e[#154](https://github.com/agronholm/exceptiongroup/issues/154) \u0026lt;https://github.com/agronholm/exceptiongroup/issues/154\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e1.3.1\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eAttributeError: 'TracebackException' object has no attribute 'exceptions'\u003c/code\u003e\nwhen formatting unpickled TBEs from another Python process which did not apply the\n\u003ccode\u003eexceptiongroup\u003c/code\u003e patches\n(\u003ccode\u003e[#144](https://github.com/agronholm/exceptiongroup/issues/144) \u0026lt;https://github.com/agronholm/exceptiongroup/issues/144\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e1.3.0\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003e**kwargs\u003c/code\u003e to function and method signatures as appropriate to match the\nsignatures in the standard library\u003c/li\u003e\n\u003cli\u003eIn line with the stdlib typings in typeshed, updated \u003ccode\u003e(Base)ExceptionGroup\u003c/code\u003e generic\ntypes to define defaults for their generic arguments (defaulting to\n\u003ccode\u003eBaseExceptionGroup[BaseException]\u003c/code\u003e and \u003ccode\u003eExceptionGroup[Exception]\u003c/code\u003e)\n(PR by \u003ca href=\"https://github.com/mikenerone\"\u003e\u003ccode\u003e@​mikenerone\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eBaseExceptionGroup.__init__()\u003c/code\u003e to directly call\n\u003ccode\u003eBaseException.__init__()\u003c/code\u003e instead of the superclass \u003ccode\u003e__init__()\u003c/code\u003e in order to\nemulate the CPython behavior (broken or not) (PR by \u003ca href=\"https://github.com/cfbolz\"\u003e\u003ccode\u003e@​cfbolz\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged the \u003ccode\u003eexceptions\u003c/code\u003e attribute to always return the same tuple of exceptions,\ncreated from the original exceptions sequence passed to \u003ccode\u003eBaseExceptionGroup\u003c/code\u003e to\nmatch CPython behavior\n(\u003ccode\u003e[#143](https://github.com/agronholm/exceptiongroup/issues/143) \u0026lt;https://github.com/agronholm/exceptiongroup/issues/143\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e1.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an \u003ccode\u003eassert\u003c/code\u003e in \u003ccode\u003eexceptiongroup._formatting\u003c/code\u003e that caused compatibility\nissues with Sentry (\u003ccode\u003e[#123](https://github.com/agronholm/exceptiongroup/issues/123) \u0026lt;https://github.com/agronholm/exceptiongroup/issues/123\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e1.2.1\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated the copying of \u003ccode\u003e__notes__\u003c/code\u003e to match CPython behavior (PR by CF Bolz-Tereick)\u003c/li\u003e\n\u003cli\u003eCorrected the type annotation of the exception handler callback to accept a\n\u003ccode\u003eBaseExceptionGroup\u003c/code\u003e instead of \u003ccode\u003eBaseException\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFixed type errors on Python \u0026lt; 3.10 and the type annotation of \u003ccode\u003esuppress()\u003c/code\u003e\n(PR by John Litborn)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e1.2.0\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded special monkeypatching if \u003ccode\u003eApport \u0026lt;https://github.com/canonical/apport\u0026gt;\u003c/code\u003e_ has\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/ddddb6fdf8582c4ae5187dc1bd258115974229fe\"\u003e\u003ccode\u003eddddb6f\u003c/code\u003e\u003c/a\u003e Added the release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/49c5e60d9efad1416f4f42455e119375904a1d6d\"\u003e\u003ccode\u003e49c5e60\u003c/code\u003e\u003c/a\u003e Fixed AttributeError when formatting unpickled TBEs from an unpatched process\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/1be517f553249822a8fa12a4d7520d4b3ef15acd\"\u003e\u003ccode\u003e1be517f\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/exceptiongroup/issues/152\"\u003e#152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/af0ea2fdfe218a4c2a1cb31ebd1a61dba459af6f\"\u003e\u003ccode\u003eaf0ea2f\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/exceptiongroup/issues/149\"\u003e#149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/7c980a88a06a72db3d796d98504b335d24274abb\"\u003e\u003ccode\u003e7c980a8\u003c/code\u003e\u003c/a\u003e Removed pin on pyright version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/ef853368c8b94479adbd33cc58f1cac05839e116\"\u003e\u003ccode\u003eef85336\u003c/code\u003e\u003c/a\u003e Fixed typing job not finding Python 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/080b3f4e925bbdb8cee70cc30c5ef2937eab2bde\"\u003e\u003ccode\u003e080b3f4\u003c/code\u003e\u003c/a\u003e Pinned pyright version to fix typeshed related failure\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/ac660908a1987880eddbb249947c1eef6e08513b\"\u003e\u003ccode\u003eac66090\u003c/code\u003e\u003c/a\u003e Added Python 3.14 to the test matrix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/a0da94dadfb39c0b52c0cd5c87ace166b00f74c1\"\u003e\u003ccode\u003ea0da94d\u003c/code\u003e\u003c/a\u003e Fixed test failures on Python 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/77fba8a871408ff2c48f536e5e73b1918239ba5f\"\u003e\u003ccode\u003e77fba8a\u003c/code\u003e\u003c/a\u003e Added the release version\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/exceptiongroup/compare/1.2.2...1.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fsspec` from 2026.3.0 to 2026.4.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/8fdedd1fd17be354f75f0cec1f973d93416c704b\"\u003e\u003ccode\u003e8fdedd1\u003c/code\u003e\u003c/a\u003e Merge branch 'master' of \u003ca href=\"https://github.com/fsspec/filesystem_spec\"\u003ehttps://github.com/fsspec/filesystem_spec\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/8205d0d1afecb64f34565ebeb073b7f1959a869d\"\u003e\u003ccode\u003e8205d0d\u003c/code\u003e\u003c/a\u003e Release (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2027\"\u003e#2027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/50bfba22200077fa602038857e19d58cc2541db5\"\u003e\u003ccode\u003e50bfba2\u003c/code\u003e\u003c/a\u003e Merge branch 'master' of \u003ca href=\"https://github.com/fsspec/filesystem_spec\"\u003ehttps://github.com/fsspec/filesystem_spec\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/f58bc851213ab3a87b2d26c01c9d26b291b0e1d3\"\u003e\u003ccode\u003ef58bc85\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;DEP: de-duplicate and sort optional dependencies (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2021\"\u003e#2021\u003c/a\u003e)\u0026quot; (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2026\"\u003e#2026\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/c6c7b40b7794c6e554d9dcae7bf4930bba67e403\"\u003e\u003ccode\u003ec6c7b40\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;DEP: de-duplicate and sort optional dependencies (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2021\"\u003e#2021\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/3bc67f85c3b67c5adef11af35761fd839de306fb\"\u003e\u003ccode\u003e3bc67f8\u003c/code\u003e\u003c/a\u003e DEP: de-duplicate and sort optional dependencies (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2021\"\u003e#2021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/0b290bf1336bb15d4327afcdf743d9a17b5ea762\"\u003e\u003ccode\u003e0b290bf\u003c/code\u003e\u003c/a\u003e docs: add URL handling note to HTTPFileSystem class docstring (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2024\"\u003e#2024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/b33a2d6c3b6912c645d9a315791f41e74bff4c66\"\u003e\u003ccode\u003eb33a2d6\u003c/code\u003e\u003c/a\u003e ci: install downstream systems like gcsfs before testing so the \u003ccode\u003e_version.py\u003c/code\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/e9e7a5b5eab42b6c6d0790aa0aa510f66fc44630\"\u003e\u003ccode\u003ee9e7a5b\u003c/code\u003e\u003c/a\u003e Delegate DirFileSystem delete and write_text (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2022\"\u003e#2022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/105d614a443e3f46236deb87442cc5491741687c\"\u003e\u003ccode\u003e105d614\u003c/code\u003e\u003c/a\u003e fix: use encode_url() in _pipe_file for consistency (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2023\"\u003e#2023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fsspec/filesystem_spec/compare/2026.3.0...2026.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `googleapis-common-protos` from 1.74.0 to 1.75.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\"\u003egoogleapis-common-protos's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogleapis-common-protos: v1.75.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/googleapis-common-protos-v1.74.0...googleapis-common-protos-v1.75.0\"\u003ev1.75.0\u003c/a\u003e (2026-05-06)\u003c/h2\u003e\n\u003c/blockquote\u003e\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/3997a108c45e1c1df8e844746eb2af4b1a77e154\"\u003e\u003ccode\u003e3997a10\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20260506T163115Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16964\"\u003e#16964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f655e492c0879684b60a7d06e90501dd49e96252\"\u003e\u003ccode\u003ef655e49\u003c/code\u003e\u003c/a\u003e chore: add type annotation to SYNCPOINTS (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16973\"\u003e#16973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f149bd7dd30489c3165bf03a2343dc9f75875451\"\u003e\u003ccode\u003ef149bd7\u003c/code\u003e\u003c/a\u003e refactor(bigframes): Modularize compiler routing as proxy executor (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16907\"\u003e#16907\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/19db82f5cb033215531e5b65239e45275e3ed568\"\u003e\u003ccode\u003e19db82f\u003c/code\u003e\u003c/a\u003e chore(bigframes): remove leftover support for Python \u0026lt;= 3.9 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16961\"\u003e#16961\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/2dedaacf0666ade39ae89194ad8dbc34761bd1df\"\u003e\u003ccode\u003e2dedaac\u003c/code\u003e\u003c/a\u003e chore: test CommonResource resource name alias (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16965\"\u003e#16965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/9652a08cb89441fac779eb4fa4d6f48f33b55d3b\"\u003e\u003ccode\u003e9652a08\u003c/code\u003e\u003c/a\u003e fix: pass resource aliases to file-level CommonResources (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16945\"\u003e#16945\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/78a48b040a2abc0bf19ebe267aba0a1f410df2e6\"\u003e\u003ccode\u003e78a48b0\u003c/code\u003e\u003c/a\u003e fix(google-cloud-core): Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16953\"\u003e#16953\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/5975c48186dd8798b172ac442fd55bc7fece1612\"\u003e\u003ccode\u003e5975c48\u003c/code\u003e\u003c/a\u003e fix(dns): Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16954\"\u003e#16954\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/d5bea2e99b435b8b3d75321679072db092001de6\"\u003e\u003ccode\u003ed5bea2e\u003c/code\u003e\u003c/a\u003e fix(crc32c): Drop support for Python 3.8 and 3.9 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16955\"\u003e#16955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/63f6d96c1c5569b5fdaea85dfe995ce280907b98\"\u003e\u003ccode\u003e63f6d96\u003c/code\u003e\u003c/a\u003e fix(sqlalchemy-bigquery): Drop support for Python 3.8 and 3.9 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16956\"\u003e#16956\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/googleapis-common-protos-v1.74.0...googleapis-common-protos-v1.75.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.11 to 3.13\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.rst\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e3.13 (2026-04-22)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect classification error for codepoint U+A7F1\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e3.12 (2026-04-21)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 17.0.0.\u003c/li\u003e\n\u003cli\u003eIssue a deprecation warning for the transitional argument.\u003c/li\u003e\n\u003cli\u003eAdded lazy-loading to provide some performance improvements.\u003c/li\u003e\n\u003cli\u003eRemoved vestiges of code related to Python 2 support, including\nsegmentation of data structures specific to Jython.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Rodrigo Nogueira for contributions to this release.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/89cdfd27338896cee6b1ee18e64c96ac28684ce0\"\u003e\u003ccode\u003e89cdfd2\u003c/code\u003e\u003c/a\u003e Release v3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1eb068687543118147417a8d8a70674e2c172891\"\u003e\u003ccode\u003e1eb0686\u003c/code\u003e\u003c/a\u003e Pre-release 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5f20d1e41eea3b3873d18d83d7a384784f72a92e\"\u003e\u003ccode\u003e5f20d1e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/220\"\u003e#220\u003c/a\u003e from kjd/unicode-next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/4ea84252ab21e62a79e5a3273746112b5dcfb810\"\u003e\u003ccode\u003e4ea8425\u003c/code\u003e\u003c/a\u003e Regenerate idnadata.py with correct NFKC_CF data\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/fd47341a08bbdcffda33694211ca4de10170cd41\"\u003e\u003ccode\u003efd47341\u003c/code\u003e\u003c/a\u003e Use NFKC_CF from Unicode data files instead of Python's unicodedata module\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/a5304a4cdbd7b31595f8ac42ffdfa88f5b936467\"\u003e\u003ccode\u003ea5304a4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/219\"\u003e#219\u003c/a\u003e from kjd/release-3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d80d6f9254d699961fa2c669a1534cde9d4ee5b6\"\u003e\u003ccode\u003ed80d6f9\u003c/code\u003e\u003c/a\u003e Release v3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1bb44ddb3f2a9dcf97a6ac11aba34e5b6ed31291\"\u003e\u003ccode\u003e1bb44dd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/218\"\u003e#218\u003c/a\u003e from kjd/release-candidate-3.12rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/909c49d15b8d159be163bccc7972116baffdb47b\"\u003e\u003ccode\u003e909c49d\u003c/code\u003e\u003c/a\u003e Release candidate for 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c5459a10370f005dc09921aee3201b5a45699f9d\"\u003e\u003ccode\u003ec5459a1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/217\"\u003e#217\u003c/a\u003e from kjd/housekeeping-2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.11...v3.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jsonschema` from 4.25.1 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\u003c/blockquote\u003e\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\u003c/blockquote\u003e\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.25.1...v4.26.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-classic` from 1.0.3 to 1.0.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-classic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-classic==1.0.7\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-classic==1.0.6\u003c/p\u003e\n\u003cp\u003erelease(langchain-classic): 1.0.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37240\"\u003e#37240\u003c/a\u003e)\nchore(langchain-classic): deprecate hub, limit loads/dumps (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37234\"\u003e#37234\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-classic==1.0.6\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-classic==1.0.5\u003c/p\u003e\n\u003cp\u003erelease(langchain-classic): 1.0.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37211\"\u003e#37211\u003c/a\u003e)\nchore: bump jupyter-server from 2.17.0 to 2.18.0 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37203\"\u003e#37203\u003c/a\u003e)\nfix(langchain): restrict deserialization in \u003ccode\u003elangchain_classic.storage._lc_store\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37208\"\u003e#37208\u003c/a\u003e)\nfix(langchain): use langchain-classic version for \u003ccode\u003ehub.pull\u003c/code\u003e deprecation (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37199\"\u003e#37199\u003c/a\u003e)\nfix(core, langchain): harden \u003ccode\u003eload()\u003c/code\u003e against untrusted manifests (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37197\"\u003e#37197\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-classic==1.0.5\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-classic==1.0.4\u003c/p\u003e\n\u003cp\u003erelease(langchain-classic): 1.0.5 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37165\"\u003e#37165\u003c/a\u003e)\nrefactor(langchain-classic): retarget deprecations to \u003ccode\u003ecreate_agent\u003c/code\u003e, other chores (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37164\"\u003e#37164\u003c/a\u003e)\nchore(langchain,langchain-classic): uncomment optional deps (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37163\"\u003e#37163\u003c/a\u003e)\nchore: bump types-pyyaml from 6.0.12.20250915 to 6.0.12.20260408 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37130\"\u003e#37130\u003c/a\u003e)\nchore: bump types-pytz from 2026.1.1.20260304 to 2026.1.1.20260408 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37131\"\u003e#37131\u003c/a\u003e)\nchore: bump notebook from 7.4.5 to 7.5.6 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37104\"\u003e#37104\u003c/a\u003e)\nrelease(perplexity): 1.2.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37091\"\u003e#37091\u003c/a\u003e)\nchore(docs): update x handle references (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37081\"\u003e#37081\u003c/a\u003e)\nhotfix: bump min core versions (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36996\"\u003e#36996\u003c/a\u003e)\nrelease(openai): 1.2.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36995\"\u003e#36995\u003c/a\u003e)\nfeat(core): add content-block-centric streaming (v2) (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36834\"\u003e#36834\u003c/a\u003e)\nfix(fireworks): honor \u003ccode\u003emax_retries\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36973\"\u003e#36973\u003c/a\u003e)\nrelease(openai): 1.2.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36961\"\u003e#36961\u003c/a\u003e)\nchore: bump nbconvert from 7.17.0 to 7.17.1 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36922\"\u003e#36922\u003c/a\u003e)\nchore: bump langsmith from 0.7.13 to 0.7.31 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36812\"\u003e#36812\u003c/a\u003e)\nrelease(core): release 1.3.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36851\"\u003e#36851\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-classic==1.0.4\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-classic==1.0.3\u003c/p\u003e\n\u003cp\u003erelease(langchain-classic): 1.0.4 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36827\"\u003e#36827\u003c/a\u003e)\nchore(langchain-classic): add deprecations (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36826\"\u003e#36826\u003c/a\u003e)\nfix(langchain-classic): suppress mypy errors in compat code (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36806\"\u003e#36806\u003c/a\u003e)\nchore(deps): bump pytest to \u003ccode\u003e9.0.3\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36801\"\u003e#36801\u003c/a\u003e)\nchore: bump pytest from 9.0.2 to 9.0.3 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36718\"\u003e#36718\u003c/a\u003e)\nchore: bump pillow from 12.1.1 to 12.2.0 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36709\"\u003e#36709\u003c/a\u003e)\nchore: bump cryptography from 46.0.6 to 46.0.7 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36620\"\u003e#36620\u003c/a\u003e)\nchore: bump aiohttp from 3.13.3 to 3.13.4 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36439\"\u003e#36439\u003c/a\u003e)\nchore: pygments\u0026gt;=2.20.0 across all packages (CVE-2026-4539) (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36385\"\u003e#36385\u003c/a\u003e)\nchore: bump cryptography from 46.0.5 to 46.0.6 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36325\"\u003e#36325\u003c/a\u003e)\nchore: bump requests from 2.32.5 to 2.33.0 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36242\"\u003e#36242\u003c/a\u003e)\nfix(langchain,langchain-classic): update model provider classes for Azure AI Foundry (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/35812\"\u003e#35812\u003c/a\u003e)\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/ec9a3c15ad09c21d360c37d26f557bab631f6bf6\"\u003e\u003ccode\u003eec9a3c1\u003c/code\u003e\u003c/a\u003e release(langchain-classic): 1.0.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37240\"\u003e#37240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/3de039a46abe1f7008a45a5f6a3c35c2ce6f940d\"\u003e\u003ccode\u003e3de039a\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37231\"\u003e#37231\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/cccefce0b14e773ed3246128517f2f88add20059\"\u003e\u003ccode\u003ecccefce\u003c/code\u003e\u003c/a\u003e chore(langchain-classic): deprecate hub, limit loads/dumps (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37234\"\u003e#37234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/1519ed5afbc3bfcc7170b12baa07f1ae7e98edd0\"\u003e\u003ccode\u003e1519ed5\u003c/code\u003e\u003c/a\u003e release(langchain-classic): 1.0.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37211\"\u003e#37211\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/16b7e43ef41d1860105d3f606150742fea3acf12\"\u003e\u003ccode\u003e16b7e43\u003c/code\u003e\u003c/a\u003e chore: bump jupyter-server from 2.17.0 to 2.18.0 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37\"\u003e#37\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/ad305571ba699b4d044584f18eaa076ce9d6fbfd\"\u003e\u003ccode\u003ead30557\u003c/code\u003e\u003c/a\u003e chore: bump jupyter-server from 2.17.0 to 2.18.0 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37203\"\u003e#37203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/2ca920cf8289279869cedc5ec394b0e1f29c41da\"\u003e\u003ccode\u003e2ca920c\u003c/code\u003e\u003c/a\u003e chore: bump jupyter-server from 2.17.0 to 2.18.0 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37204\"\u003e#37204\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/c0e1d1366ea298612c4e7cebaf597b81d3c1811a\"\u003e\u003ccode\u003ec0e1d13\u003c/code\u003e\u003c/a\u003e fix(langchain): restrict deserialization in `langchain_classic.storage._lc_st...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/69fb89f873b0bf83239010960a9aacc88913daf9\"\u003e\u003ccode\u003e69fb89f\u003c/code\u003e\u003c/a\u003e fix(langchain): use langchain-classic version for \u003ccode\u003ehub.pull\u003c/code\u003e deprecation (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37\"\u003e#37\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/5039dfec1f8e78459540a7f1b52fb0d6d82e3f07\"\u003e\u003ccode\u003e5039dfe\u003c/code\u003e\u003c/a\u003e release(core): 1.3.3 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37198\"\u003e#37198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain-classic==1.0.3...langchain-classic==1.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-text-splitters` from 1.1.1 to 1.1.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-text-splitters's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-text-splitters==1.1.2\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-text-splitters==1.1.1\u003c/p\u003e\n\u003cp\u003erelease(text-splitters): 1.1.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36822\"\u003e#36822\u003c/a\u003e)\nfix(text-splitters): deprecate and use SSRF-safe transport in split_text_from_url (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36821\"\u003e#36821\u003c/a\u003e)\nchore: bump langsmith from 0.6.3 to 0.7.31 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36797\"\u003e#36797\u003c/a\u003e)\nchore(deps): bump pytest to \u003ccode\u003e9.0.3\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36801\"\u003e#36801\u003c/a\u003e)\nchore: bump pytest from 9.0.2 to 9.0.3 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36714\"\u003e#36714\u003c/a\u003e)\nchore: add comment explaining \u003ccode\u003epygments\u0026gt;=2.20.0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36570\"\u003e#36570\u003c/a\u003e)\nrelease(core): 1.2.26 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36511\"\u003e#36511\u003c/a\u003e)\nchore: pygments\u0026gt;=2.20.0 across all packages (CVE-2026-4539) (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36385\"\u003e#36385\u003c/a\u003e)\nfix(text-splitters): prevent silent data loss for empty dict values in RecursiveJsonSplitter (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/35079\"\u003e#35079\u003c/a\u003e)\nfeat(text-splitters): support spacy tests with Python 3.14 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36198\"\u003e#36198\u003c/a\u003e)\nfix(infra): correct lint_diff relative paths in package makefiles (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36333\"\u003e#36333\u003c/a\u003e)\nchore: bump requests from 2.32.5 to 2.33.0 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langcha...\n\n_Description has been truncated_","html_url":"https://github.com/ai-code-review-2026/backend/pull/2","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-code-review-2026%2Fbackend/issues/2","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/2/packages"},{"uuid":"4381602763","node_id":"PR_kwDORgwaGs7YRBoz","number":89,"state":"closed","title":"build(deps): update chardet requirement from \u003e=5.0.0 to \u003e=7.4.3","user":"dependabot[bot]","labels":["dependencies","backend","automation","security-scan","python"],"assignees":["dependabot[bot]"],"locked":false,"comments_count":7,"pull_request":true,"closed_at":"2026-05-05T04:52:36.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-05T04:49:43.000Z","updated_at":"2026-05-05T04:52:45.000Z","time_to_close":173,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): update","packages":[{"name":"chardet","old_version":"\u003e=5.0.0","new_version":"\u003e=7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [chardet](https://github.com/chardet/chardet) 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/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore 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/BhautikVekariya21/ai-interview/pull/89","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/BhautikVekariya21%2Fai-interview/issues/89","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/89/packages"},{"uuid":"4371713539","node_id":"PR_kwDORE1nLM7XxJcD","number":100,"state":"closed","title":"build(deps): bump chardet in /","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":["mdaubie"],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-03T20:58:03.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-03T11:57:21.000Z","updated_at":"2026-05-03T20:58:11.000Z","time_to_close":32442,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps)","packages":[{"name":"chardet","old_version":"5.2.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":"/","ecosystem":"pip"},"body":"[//]: # (dependabot-start)\n⚠️  **Dependabot is rebasing this PR** ⚠️ \n\nRebasing might not happen immediately, so don't worry if this takes some time.\n\nNote: if you make any changes to this PR yourself, they will take precedence over the rebase.\n\n---\n\n[//]: # (dependabot-end)\n\nBumps the per-dependency/chardet group with 1 update: [chardet](https://github.com/chardet/chardet).\n\nUpdates `chardet` from 5.2.0 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chardet\u0026package-manager=uv\u0026previous-version=5.2.0\u0026new-version=7.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \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/mdaubie/muxwell/pull/100","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mdaubie%2Fmuxwell/issues/100","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/100/packages"},{"uuid":"4367913424","node_id":"PR_kwDOSSEpB87Xl_Nn","number":15,"state":"closed","title":"chore(deps)(deps): bump chardet from 5.2.0 to 7.4.3 in /backend","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-02T04:44:22.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-02T04:31:30.000Z","updated_at":"2026-05-02T04:44:24.000Z","time_to_close":772,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)(deps)","packages":[{"name":"chardet","old_version":"5.2.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps [chardet](https://github.com/chardet/chardet) from 5.2.0 to 7.4.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chardet\u0026package-manager=pip\u0026previous-version=5.2.0\u0026new-version=7.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/xr843/buddhist-text-collation/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/xr843%2Fbuddhist-text-collation/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"},{"uuid":"4362351102","node_id":"PR_kwDORbMusc7XUSjd","number":77,"state":"open","title":"deps(backend): bump the python-minor group across 1 directory with 47 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-05-01T01:49:58.000Z","updated_at":"2026-05-01T01:51:05.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(backend): bump","group_name":"python-minor","update_count":47,"packages":[{"name":"fastapi","old_version":"0.136.0","new_version":"0.136.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"pydantic","old_version":"2.13.2","new_version":"2.13.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.13.1","new_version":"2.14.0","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"uvicorn","old_version":"0.44.0","new_version":"0.46.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"ruff","old_version":"0.15.11","new_version":"0.15.12","repository_url":"https://github.com/astral-sh/ruff"},{"name":"semgrep","old_version":"1.159.0","new_version":"1.161.0","repository_url":"https://github.com/semgrep/semgrep"},{"name":"python-multipart","old_version":"0.0.26","new_version":"0.0.27","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"langchain-core","old_version":"1.3.0","new_version":"1.3.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langgraph","old_version":"1.1.8","new_version":"1.1.9","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"anthropic","old_version":"0.96.0","new_version":"0.97.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"chardet","old_version":"7.4.1","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"click","old_version":"8.1.8","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"},{"name":"exceptiongroup","old_version":"1.2.2","new_version":"1.3.1","repository_url":"https://github.com/agronholm/exceptiongroup"},{"name":"fsspec","old_version":"2026.3.0","new_version":"2026.4.0","repository_url":"https://github.com/fsspec/filesystem_spec"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"jsonschema","old_version":"4.25.1","new_version":"4.26.0","repository_url":"https://github.com/python-jsonschema/jsonschema"},{"name":"langchain-classic","old_version":"1.0.3","new_version":"1.0.4","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-text-splitters","old_version":"1.1.1","new_version":"1.1.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langgraph-checkpoint","old_version":"4.0.1","new_version":"4.0.3","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langgraph-prebuilt","old_version":"1.0.9","new_version":"1.0.13","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langsmith","old_version":"0.7.30","new_version":"0.8.0","repository_url":"https://github.com/langchain-ai/langsmith-sdk"},{"name":"mako","old_version":"1.3.10","new_version":"1.3.12","repository_url":"https://github.com/sqlalchemy/mako"},{"name":"mcp","old_version":"1.23.3","new_version":"1.27.0","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"mpmath","old_version":"1.3.0","new_version":"1.4.1","repository_url":"https://github.com/mpmath/mpmath"},{"name":"ollama","old_version":"0.6.1","new_version":"0.6.2","repository_url":"https://github.com/ollama/ollama-python"},{"name":"opentelemetry-api","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-threading","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-sdk","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"packaging","old_version":"26.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pathspec","old_version":"1.0.4","new_version":"1.1.1","repository_url":"https://github.com/cpburnz/python-pathspec"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.46.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"ruamel-yaml-clib","old_version":"0.2.14","new_version":"0.2.15"},{"name":"sse-starlette","old_version":"3.3.4","new_version":"3.4.1","repository_url":"https://github.com/sysid/sse-starlette"},{"name":"tokenizers","old_version":"0.22.2","new_version":"0.23.1","repository_url":"https://github.com/huggingface/tokenizers"},{"name":"tomli","old_version":"2.0.2","new_version":"2.4.1","repository_url":"https://github.com/hukkin/tomli"},{"name":"torch","old_version":"2.10.0","new_version":"2.11.0","repository_url":"https://github.com/pytorch/pytorch"},{"name":"tzdata","old_version":"2026.1","new_version":"2026.2","repository_url":"https://github.com/python/tzdata"},{"name":"xxhash","old_version":"3.6.0","new_version":"3.7.0","repository_url":"https://github.com/ifduyue/python-xxhash"},{"name":"zipp","old_version":"3.23.0","new_version":"3.23.1","repository_url":"https://github.com/jaraco/zipp"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor group with 47 updates in the /apps/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.0` | `0.136.1` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.2` | `2.13.3` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.13.1` | `2.14.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.44.0` | `0.46.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.11` | `0.15.12` |\n| [semgrep](https://github.com/semgrep/semgrep) | `1.159.0` | `1.161.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.26` | `0.0.27` |\n| [langchain-core](https://github.com/langchain-ai/langchain) | `1.3.0` | `1.3.2` |\n| [langgraph](https://github.com/langchain-ai/langgraph) | `1.1.8` | `1.1.9` |\n| [anthropic](https://github.com/anthropics/anthropic-sdk-python) | `0.96.0` | `0.97.0` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.4.22` |\n| [chardet](https://github.com/chardet/chardet) | `7.4.1` | `7.4.3` |\n| [click](https://github.com/pallets/click) | `8.1.8` | `8.3.3` |\n| [exceptiongroup](https://github.com/agronholm/exceptiongroup) | `1.2.2` | `1.3.1` |\n| [fsspec](https://github.com/fsspec/filesystem_spec) | `2026.3.0` | `2026.4.0` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.13` |\n| [jsonschema](https://github.com/python-jsonschema/jsonschema) | `4.25.1` | `4.26.0` |\n| [langchain-classic](https://github.com/langchain-ai/langchain) | `1.0.3` | `1.0.4` |\n| [langchain-text-splitters](https://github.com/langchain-ai/langchain) | `1.1.1` | `1.1.2` |\n| [langgraph-checkpoint](https://github.com/langchain-ai/langgraph) | `4.0.1` | `4.0.3` |\n| [langgraph-prebuilt](https://github.com/langchain-ai/langgraph) | `1.0.9` | `1.0.13` |\n| [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.7.30` | `0.8.0` |\n| [mako](https://github.com/sqlalchemy/mako) | `1.3.10` | `1.3.12` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.23.3` | `1.27.0` |\n| [mpmath](https://github.com/mpmath/mpmath) | `1.3.0` | `1.4.1` |\n| [ollama](https://github.com/ollama/ollama-python) | `0.6.1` | `0.6.2` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-instrumentation-threading](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.58b0` | `0.62b1` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.2` |\n| [pathspec](https://github.com/cpburnz/python-pathspec) | `1.0.4` | `1.1.1` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.46.3` |\n| ruamel-yaml-clib | `0.2.14` | `0.2.15` |\n| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.3.4` | `3.4.1` |\n| [tokenizers](https://github.com/huggingface/tokenizers) | `0.22.2` | `0.23.1` |\n| [tomli](https://github.com/hukkin/tomli) | `2.0.2` | `2.4.1` |\n| [torch](https://github.com/pytorch/pytorch) | `2.10.0` | `2.11.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.1` | `2026.2` |\n| [xxhash](https://github.com/ifduyue/python-xxhash) | `3.6.0` | `3.7.0` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.0` | `3.23.1` |\n\n\nUpdates `fastapi` from 0.136.0 to 0.136.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.136.1\u003c/h2\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Update Pydantic v2 code to address deprecations. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15101\"\u003e#15101\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔨 Tweak translation script. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15174\"\u003e#15174\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 mkdocs-material from 9.7.1 to 9.7.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15408\"\u003e#15408\u003c/a\u003e by \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 inline-snapshot from 0.31.1 to 0.32.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15409\"\u003e#15409\u003c/a\u003e by \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 pytest-codspeed from 4.3.0 to 4.4.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15407\"\u003e#15407\u003c/a\u003e by \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 pytest-cov from 7.0.0 to 7.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15406\"\u003e#15406\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.14.1 to 3.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15405\"\u003e#15405\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump mypy from 1.19.1 to 1.20.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15410\"\u003e#15410\u003c/a\u003e by \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 python-dotenv from 1.2.1 to 1.2.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15400\"\u003e#15400\u003c/a\u003e by \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 0.52.1 to 1.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15397\"\u003e#15397\u003c/a\u003e by \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 pygithub from 2.8.1 to 2.9.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15396\"\u003e#15396\u003c/a\u003e by \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.12.0 to 2.12.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15393\"\u003e#15393\u003c/a\u003e by \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 zizmor from 1.23.1 to 1.24.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15394\"\u003e#15394\u003c/a\u003e by \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 strawberry-graphql from 0.312.3 to 0.314.3. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15395\"\u003e#15395\u003c/a\u003e by \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 python-multipart from 0.0.22 to 0.0.26. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15360\"\u003e#15360\u003c/a\u003e by \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 authlib from 1.6.9 to 1.6.11. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15373\"\u003e#15373\u003c/a\u003e by \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 aiohttp from 3.13.3 to 3.13.4. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15282\"\u003e#15282\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pygments from 2.19.2 to 2.20.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15263\"\u003e#15263\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 10.20.1 to 10.21.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15391\"\u003e#15391\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 pillow from 12.1.1 to 12.2.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15333\"\u003e#15333\u003c/a\u003e by \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 pytest from 9.0.2 to 9.0.3. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15334\"\u003e#15334\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/upload-artifact from 7.0.0 to 7.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15374\"\u003e#15374\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/cache from 5.0.4 to 5.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15385\"\u003e#15385\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove Zuplo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15369\"\u003e#15369\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove Speakeasy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15368\"\u003e#15368\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Add zizmor and fix audit findings. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15316\"\u003e#15316\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\u003c/blockquote\u003e\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/e54e5a8980ffa6d7ff68ee7b25a1c46036375521\"\u003e\u003ccode\u003ee54e5a8\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9a8a5fd99902c3b80d4cc94b85e120e2b808825f\"\u003e\u003ccode\u003e9a8a5fd\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7815a32f2ed177b8b786a48b3e0712c05b5c644f\"\u003e\u003ccode\u003e7815a32\u003c/code\u003e\u003c/a\u003e ⬆️ Update Pydantic v2 code to address deprecations (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15101\"\u003e#15101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ef1c927b0558d414e199a666833942a6fabb3a51\"\u003e\u003ccode\u003eef1c927\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/38039e12a86e67f2001b9b7d96c219691d6cb4af\"\u003e\u003ccode\u003e38039e1\u003c/code\u003e\u003c/a\u003e 🔨 Tweak translation script (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15174\"\u003e#15174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4fa826ce0a3b16884a04f51e5aac95d01790b599\"\u003e\u003ccode\u003e4fa826c\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c39415673e621665fdb7bbdde69beba7eb1dfd12\"\u003e\u003ccode\u003ec394156\u003c/code\u003e\u003c/a\u003e ⬆ Bump mkdocs-material from 9.7.1 to 9.7.6 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15408\"\u003e#15408\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ae230ad2f9d90a4e3f6222ff1a5d6e8da41ec0ad\"\u003e\u003ccode\u003eae230ad\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/d9eb39d1a1bf2f6e6e5d3a55088f61c712cb864e\"\u003e\u003ccode\u003ed9eb39d\u003c/code\u003e\u003c/a\u003e ⬆ Bump inline-snapshot from 0.31.1 to 0.32.6 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15409\"\u003e#15409\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4f8b5d14d324ae8e15cfae8d85adb4186d4c2175\"\u003e\u003ccode\u003e4f8b5d1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.0...0.136.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.2 to 2.13.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/9e9a11132c980c4ec84ff6d2df06d4c1a55ca8f3\"\u003e\u003ccode\u003e9e9a111\u003c/code\u003e\u003c/a\u003e Fix backported test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1ec8c6aa0cae1c78409c6f31af738a24e16c7124\"\u003e\u003ccode\u003e1ec8c6a\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/fb4f2044436e9fa4ff9745479ce263016a99c4d6\"\u003e\u003ccode\u003efb4f204\u003c/code\u003e\u003c/a\u003e Handle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.13.1 to 2.14.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.14.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix parsing env vars into Optional Strict types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/792\"\u003epydantic/pydantic-settings#792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RecursionError with mutually recursive models in CLI by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/794\"\u003epydantic/pydantic-settings#794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix env_file from model_config ignored in CliApp.run() (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/795\"\u003e#795\u003c/a\u003e) by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/796\"\u003epydantic/pydantic-settings#796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/798\"\u003epydantic/pydantic-settings#798\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/801\"\u003epydantic/pydantic-settings#801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump samuelcolvin/check-python-version from 4.1 to 5 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 4 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/803\"\u003epydantic/pydantic-settings#803\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 4 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/804\"\u003epydantic/pydantic-settings#804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 5 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/805\"\u003epydantic/pydantic-settings#805\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python from 5 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/806\"\u003epydantic/pydantic-settings#806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore chardet and group GitHub Actions in Dependabot by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/808\"\u003epydantic/pydantic-settings#808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/download-artifact from 4 to 8 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/809\"\u003epydantic/pydantic-settings#809\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/810\"\u003epydantic/pydantic-settings#810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport reading .env files from FIFOs (e.g. 1Password Environments) by \u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AliasChoices ignored when changing provider priority by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/813\"\u003epydantic/pydantic-settings#813\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve KeyError in run_subcommand for underscore field names by \u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/814\"\u003epydantic/pydantic-settings#814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eLiteral[numeric Enum]\u003c/code\u003e coercion for CLI and env vars by \u003ca href=\"https://github.com/m9810223\"\u003e\u003ccode\u003e@​m9810223\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/811\"\u003epydantic/pydantic-settings#811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nested discriminated unions not discovered by env/CLI providers by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/816\"\u003epydantic/pydantic-settings#816\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/820\"\u003epydantic/pydantic-settings#820\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCLI ensure env nested max split internally. by \u003ca href=\"https://github.com/kschwab\"\u003e\u003ccode\u003e@​kschwab\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/821\"\u003epydantic/pydantic-settings#821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/824\"\u003epydantic/pydantic-settings#824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eboto3-stubs\u003c/code\u003e to \u003ccode\u003etypes-boto3\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/831\"\u003epydantic/pydantic-settings#831\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI not recognizing field name with validate_by_name and AliasChoices by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/826\"\u003epydantic/pydantic-settings#826\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow customisation of the dotevn setting source to filter variables by \u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/833\"\u003epydantic/pydantic-settings#833\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce yamlfmt by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/836\"\u003epydantic/pydantic-settings#836\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump boto3 from 1.42.82 to 1.42.83 in the python-packages group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/837\"\u003epydantic/pydantic-settings#837\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce zizmor by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/838\"\u003epydantic/pydantic-settings#838\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CliPositionalArg[list[CustomType]] crash for custom types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/839\"\u003epydantic/pydantic-settings#839\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/842\"\u003epydantic/pydantic-settings#842\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/844\"\u003epydantic/pydantic-settings#844\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/847\"\u003epydantic/pydantic-settings#847\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to \u003ccode\u003ejson_schema_extra\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/843\"\u003epydantic/pydantic-settings#843\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.0 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/848\"\u003epydantic/pydantic-settings#848\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\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.13.1...v2.14.0\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.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/pydantic/pydantic-settings/commit/8916beeecc6d0510e3d0532a0ed839937400ddc3\"\u003e\u003ccode\u003e8916bee\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/848\"\u003e#848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/39e551c0910c85505b608ff85a103b2c9f7396c5\"\u003e\u003ccode\u003e39e551c\u003c/code\u003e\u003c/a\u003e Fix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to `json_schema_...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9ed7f48ea2c90f436a03b01f721fe6656c869b14\"\u003e\u003ccode\u003e9ed7f48\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/847\"\u003e#847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/617c690fb16c95eb0fb98fc88c0d6d82b9af4fa9\"\u003e\u003ccode\u003e617c690\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/844\"\u003e#844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/577c05f7e8ac25904da2381db51ed4ddd4b3e4fe\"\u003e\u003ccode\u003e577c05f\u003c/code\u003e\u003c/a\u003e Add note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/842\"\u003e#842\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/2355bc54e9d442ca7916f02de28d0c936e75441c\"\u003e\u003ccode\u003e2355bc5\u003c/code\u003e\u003c/a\u003e Fix CliPositionalArg[list[CustomType]] crash for custom types (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/839\"\u003e#839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/16bd6fd230d6280d52db6ce2a0ffef8f908cc89d\"\u003e\u003ccode\u003e16bd6fd\u003c/code\u003e\u003c/a\u003e Introduce zizmor (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/838\"\u003e#838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/df8b239fe09ba712767bdf378bc90627df375f04\"\u003e\u003ccode\u003edf8b239\u003c/code\u003e\u003c/a\u003e Bump boto3 from 1.42.82 to 1.42.83 in the python-packages group (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/837\"\u003e#837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c5401a27999cd6c0e93925deb0660cd51013c8b1\"\u003e\u003ccode\u003ec5401a2\u003c/code\u003e\u003c/a\u003e Introduce yamlfmt (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/836\"\u003e#836\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/953e28e6cfe9a9e536375d771a4ffd48535a4ab2\"\u003e\u003ccode\u003e953e28e\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/833\"\u003e#833\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.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.44.0 to 0.46.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.46.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2915\"\u003eKludex/uvicorn#2915\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2916\"\u003eKludex/uvicorn#2916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2917\"\u003eKludex/uvicorn#2917\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.45.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2903\"\u003eKludex/uvicorn#2903\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2905\"\u003eKludex/uvicorn#2905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2907\"\u003eKludex/uvicorn#2907\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2906\"\u003eKludex/uvicorn#2906\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert empty context for ASGI runs by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2911\"\u003eKludex/uvicorn#2911\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2912\"\u003eKludex/uvicorn#2912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2913\"\u003eKludex/uvicorn#2913\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Krishnachaitanyakc\"\u003e\u003ccode\u003e@​Krishnachaitanyakc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2870\"\u003eKludex/uvicorn#2870\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.46.0 (April 23, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2916\"\u003e#2916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2917\"\u003e#2917\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.45.0 (April 21, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2905\"\u003e#2905\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2913\"\u003e#2913\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Explicitly start ASGI run with empty context\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2903\"\u003e#2903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2906\"\u003e#2906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b224045f5900b7f766743bcb16ba9fc3adea2606\"\u003e\u003ccode\u003eb224045\u003c/code\u003e\u003c/a\u003e Version 0.46.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2918\"\u003e#2918\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7375b5bf66d962186d663e85615d4b4d956bf880\"\u003e\u003ccode\u003e7375b5b\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/d438fb16fe2d23c7bbc2ca7094645cff1f116458\"\u003e\u003ccode\u003ed438fb1\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3e6b96446653d0156434bce529a14c80764c9eda\"\u003e\u003ccode\u003e3e6b964\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2c423bd82be169459ea254a61476de34767e0326\"\u003e\u003ccode\u003e2c423bd\u003c/code\u003e\u003c/a\u003e Version 0.45.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7f027f8e25e47668a9c2ce8b5c21b35054c48d02\"\u003e\u003ccode\u003e7f027f8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/73a80c3cc87de269ed016e584a25e585ae6f2b44\"\u003e\u003ccode\u003e73a80c3\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45c0b568d38e9bf4f2f036bc2d79eb98b0e72f72\"\u003e\u003ccode\u003e45c0b56\u003c/code\u003e\u003c/a\u003e Revert empty context for ASGI runs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/850d92656de0cb5859ee5f6ba252e19ad3d38989\"\u003e\u003ccode\u003e850d926\u003c/code\u003e\u003c/a\u003e Raise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2906\"\u003e#2906\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/fdcacb4b83bc686ea1ba9e50ffe5b8cfe49b3e00\"\u003e\u003ccode\u003efdcacb4\u003c/code\u003e\u003c/a\u003e Accept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.44.0...0.46.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.11 to 0.15.12\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.12\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-04-24.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:ignore\u003c/code\u003e logical-line suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23404\"\u003e#23404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert preview changes to displayed diagnostic severity in LSP (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24789\"\u003e#24789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003etask-branch-as-short-circuit\u003c/code\u003e (\u003ccode\u003eAIR004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23579\"\u003e#23579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix \u003ccode\u003ebreak\u003c/code\u003e/\u003ccode\u003econtinue\u003c/code\u003e handling in \u003ccode\u003eloop-iterator-mutation\u003c/code\u003e (\u003ccode\u003eB909\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24440\"\u003e#24440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLC2701\u003c/code\u003e for type parameter scopes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24576\"\u003e#24576\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epandas-vet\u003c/code\u003e] Suggest \u003ccode\u003e.array\u003c/code\u003e as well in \u003ccode\u003ePD011\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24805\"\u003e#24805\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRespect default Unix permissions for cache files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24794\"\u003e#24794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLR0124\u003c/code\u003e description not to claim self-comparison always returns the same value (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24749\"\u003e#24749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Expand docs on reusable \u003ccode\u003eTypeVar\u003c/code\u003es and scoping (\u003ccode\u003eUP046\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24153\"\u003e#24153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove rules table accessibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24711\"\u003e#24711\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylwil3\"\u003e\u003ccode\u003e@​dylwil3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/woodruffw\"\u003e\u003ccode\u003e@​woodruffw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/avasis-ai\"\u003e\u003ccode\u003e@​avasis-ai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dev-iL\"\u003e\u003ccode\u003e@​Dev-iL\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/denyszhak\"\u003e\u003ccode\u003e@​denyszhak\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/amyreese\"\u003e\u003ccode\u003e@​amyreese\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/majiayu000\"\u003e\u003ccode\u003e@​majiayu000\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.12\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.12\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-04-24.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:ignore\u003c/code\u003e logical-line suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23404\"\u003e#23404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert preview changes to displayed diagnostic severity in LSP (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24789\"\u003e#24789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003etask-branch-as-short-circuit\u003c/code\u003e (\u003ccode\u003eAIR004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23579\"\u003e#23579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix \u003ccode\u003ebreak\u003c/code\u003e/\u003ccode\u003econtinue\u003c/code\u003e handling in \u003ccode\u003eloop-iterator-mutation\u003c/code\u003e (\u003ccode\u003eB909\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24440\"\u003e#24440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLC2701\u003c/code\u003e for type parameter scopes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24576\"\u003e#24576\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epandas-vet\u003c/code\u003e] Suggest \u003ccode\u003e.array\u003c/code\u003e as well in \u003ccode\u003ePD011\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24805\"\u003e#24805\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRespect default Unix permissions for cache files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24794\"\u003e#24794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLR0124\u003c/code\u003e description not to claim self-comparison always returns the same value (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24749\"\u003e#24749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Expand docs on reusable \u003ccode\u003eTypeVar\u003c/code\u003es and scoping (\u003ccode\u003eUP046\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24153\"\u003e#24153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove rules table accessibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24711\"\u003e#24711\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylwil3\"\u003e\u003ccode\u003e@​dylwil3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/woodruffw\"\u003e\u003ccode\u003e@​woodruffw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/avasis-ai\"\u003e\u003ccode\u003e@​avasis-ai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dev-iL\"\u003e\u003ccode\u003e@​Dev-iL\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/denyszhak\"\u003e\u003ccode\u003e@​denyszhak\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/amyreese\"\u003e\u003ccode\u003e@​amyreese\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/majiayu000\"\u003e\u003ccode\u003e@​majiayu000\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/66f93cf7ed4d36325f35a452e4afa28268fbcd28\"\u003e\u003ccode\u003e66f93cf\u003c/code\u003e\u003c/a\u003e Bump 0.15.12 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24815\"\u003e#24815\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/476a4d02e8e3b6c157ac39979d8b698a1b6baa91\"\u003e\u003ccode\u003e476a4d0\u003c/code\u003e\u003c/a\u003e [ty] Complete support for more detailed diagnostics on possibly unbound error...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ed669eab30095d6c51fe6cdef6050fb01276bcb3\"\u003e\u003ccode\u003eed669ea\u003c/code\u003e\u003c/a\u003e Implement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e73d952e43feb51356ee740c5a973fce81396ff6\"\u003e\u003ccode\u003ee73d952\u003c/code\u003e\u003c/a\u003e [ty] Include inferred type in \u003ccode\u003einvalid-key\u003c/code\u003e concise diagnostic for union/inte...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/80feb29b31cd98c093316df2e0407b0c70c01b55\"\u003e\u003ccode\u003e80feb29\u003c/code\u003e\u003c/a\u003e [ty] report only dead annotation-only locals as unused (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24811\"\u003e#24811\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0fbf2bc27336a3d17d39af52cf89b78dcda8c7c8\"\u003e\u003ccode\u003e0fbf2bc\u003c/code\u003e\u003c/a\u003e Drop deprecated license classifier (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24808\"\u003e#24808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/43b174cc7f2fcb0080bb1d4843cd4bf6b72bbe27\"\u003e\u003ccode\u003e43b174c\u003c/code\u003e\u003c/a\u003e [ty] Infer lambda parameter types with \u003ccode\u003eCallable\u003c/code\u003e type context (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24317\"\u003e#24317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4f449ae4a2377569330a5ab94799d389357b5a3f\"\u003e\u003ccode\u003e4f449ae\u003c/code\u003e\u003c/a\u003e [ty] Add error context for intersection types (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24772\"\u003e#24772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/5b4e753acb46e96ad408e4904c15308e33efe307\"\u003e\u003ccode\u003e5b4e753\u003c/code\u003e\u003c/a\u003e [ty] Add support for goto in literal enum member inlay hint (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24792\"\u003e#24792\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e7cc76275a758ce1c636ea1c2d091fd576aac794\"\u003e\u003ccode\u003ee7cc762\u003c/code\u003e\u003c/a\u003e [ty] Add error context for TypedDict assignments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24790\"\u003e#24790\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.11...0.15.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `semgrep` from 1.159.0 to 1.161.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.161.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.161.0\"\u003e1.161.0\u003c/a\u003e - 2026-04-22\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala 3.4+ trait parameters are now parsed correctly. (lang-73)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSemgrep's HTTP requests no longer log URLs above the debug level; full request\ndetails remain available when running with \u003ccode\u003eSEMGREP_LOG_SRCS=cohttp.client\u003c/code\u003e. (ENGINE-2712)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.160.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.160.0\"\u003e1.160.0\u003c/a\u003e - 2026-04-16\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala: Added tree-sitter parser for improved parsing accuracy with pfff fallback. (LANG-255)\u003c/li\u003e\n\u003cli\u003epro: taint: Improved support for variadic functions (LANG-375)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed performance issues during parsing Semgrep rules containing emoji or\nother non-BMP Unicode characters. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6070\"\u003egh-6070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning when semgrep-core rule validation fails and falls back to JSON\nschema validation, alongside details of the failure. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6071\"\u003egh-6071\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/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.161.0\"\u003e1.161.0\u003c/a\u003e - 2026-04-22\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala 3.4+ trait parameters are now parsed correctly. (lang-73)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSemgrep's HTTP requests no longer log URLs above the debug level; full request\ndetails remain available when running with \u003ccode\u003eSEMGREP_LOG_SRCS=cohttp.client\u003c/code\u003e. (ENGINE-2712)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.160.0\"\u003e1.160.0\u003c/a\u003e - 2026-04-16\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala: Added tree-sitter parser for improved parsing accuracy with pfff fallback. (LANG-255)\u003c/li\u003e\n\u003cli\u003epro: taint: Improved support for variadic functions (LANG-375)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed performance issues during parsing Semgrep rules containing emoji or\nother non-BMP Unicode characters. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6070\"\u003egh-6070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning when semgrep-core rule validation fails and falls back to JSON\nschema validation, alongside details of the failure. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6071\"\u003egh-6071\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/semgrep/semgrep/commit/34b079df03bd8ed6860552adf3905cc5d146dc4d\"\u003e\u003ccode\u003e34b079d\u003c/code\u003e\u003c/a\u003e chore: release version 1.161.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/1e6302b4fde5950a805bf5c0abd7d879f11b9f6b\"\u003e\u003ccode\u003e1e6302b\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6115\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/9859b4e2e73cff0211d3b4463fe96ab334989c68\"\u003e\u003ccode\u003e9859b4e\u003c/code\u003e\u003c/a\u003e http_helpers: \u003ccode\u003escrub_uri\u003c/code\u003e for safer URI logging (semgrep/semgrep-proprietary#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/e2916c14861468bc7e2cee1f8b5276a76b91452c\"\u003e\u003ccode\u003ee2916c1\u003c/code\u003e\u003c/a\u003e scrub URLs from http_helpers logs and returned errors (semgrep/semgrep-propri...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/341da2a7ed8510686d9c43e69e6c396c54bb1dc3\"\u003e\u003ccode\u003e341da2a\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6099\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/eae9a00ede6425c3f8c9be3b2f5b78d7b92ec91b\"\u003e\u003ccode\u003eeae9a00\u003c/code\u003e\u003c/a\u003e fix: correct \u003ccode\u003eis_obrace\u003c/code\u003e to \u003ccode\u003eis_cbrace\u003c/code\u003e for closing brace count (semgrep/semg...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/d668b7179b3b3dbb210f35518595d242c667bea2\"\u003e\u003ccode\u003ed668b71\u003c/code\u003e\u003c/a\u003e chore(backend): deprecate scan endpoint v1 for semgrep ci (semgrep/semgrep-pr...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/d981dbfdf752e9cf9bc8a1a4f177b3d05a32c944\"\u003e\u003ccode\u003ed981dbf\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6098\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/2ee8536b33fad02ab3b63868014a72583ad108a6\"\u003e\u003ccode\u003e2ee8536\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6102\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/00fa4efaa465f3a58a18b511a4b12a165620069c\"\u003e\u003ccode\u003e00fa4ef\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6097\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/semgrep/semgrep/compare/v1.159.0...v1.161.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-multipart` from 0.0.26 to 0.0.27\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.27\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePass parse offsets via constructors by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/268\"\u003eKludex/python-multipart#268\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd multipart header limits by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/267\"\u003eKludex/python-multipart#267\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\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.27 (2026-04-27)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd multipart header limits \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/267\"\u003e#267\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePass parse offsets via constructors \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/268\"\u003e#268\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/6d1d6892a6b01b25da6f3e7b097e8e06c57fb250\"\u003e\u003ccode\u003e6d1d689\u003c/code\u003e\u003c/a\u003e Version 0.0.27 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/272\"\u003e#272\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/0b10220b1555af068a2bc8b198022b1ae238200f\"\u003e\u003ccode\u003e0b10220\u003c/code\u003e\u003c/a\u003e Run CI on main branch pull requests (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/271\"\u003e#271\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/3e64f5f8caba0e5d391b0c1ad0f1c2edf9e8f911\"\u003e\u003ccode\u003e3e64f5f\u003c/code\u003e\u003c/a\u003e Add multipart header limits (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/267\"\u003e#267\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/eb109cc4eb8174f2a7efc1ba894b1bf6425c0b14\"\u003e\u003ccode\u003eeb109cc\u003c/code\u003e\u003c/a\u003e Pass parse offsets via constructors (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/268\"\u003e#268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/78e29abb9a339598975beee093a770ec3033f76d\"\u003e\u003ccode\u003e78e29ab\u003c/code\u003e\u003c/a\u003e Bump pytest from 9.0.2 to 9.0.3 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/266\"\u003e#266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b2ddd0982bdf0fe852e4f3baa12122d2827af46c\"\u003e\u003ccode\u003eb2ddd09\u003c/code\u003e\u003c/a\u003e fuzz: Enhance fuzzing capabilities with new chunked and boundary tests (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/264\"\u003e#264\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-core` from 1.3.0 to 1.3.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-core's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-core==1.3.2\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-core==1.3.1\u003c/p\u003e\n\u003cp\u003erelease(core): 1.3.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36990\"\u003e#36990\u003c/a\u003e)\nfeat(core): add content-block-centric streaming (v2) (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36834\"\u003e#36834\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-core==1.3.1\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-core==1.3.0\u003c/p\u003e\n\u003cp\u003erelease(core): 1.3.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36972\"\u003e#36972\u003c/a\u003e)\nfeat(core): allow _format_output to pass through list of ToolOutputMixin instances (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36963\"\u003e#36963\u003c/a\u003e)\nchore: bump nbconvert from 7.17.0 to 7.17.1 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36923\"\u003e#36923\u003c/a\u003e)\nfeat(core): Update inheritance behavior for tracer metadata for special keys (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36900\"\u003e#36900\u003c/a\u003e)\nchore: bump langsmith from 0.7.13 to 0.7.31 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36813\"\u003e#36813\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/fa0f0d8efa54005b9256f8d4b28d1ff770372901\"\u003e\u003ccode\u003efa0f0d8\u003c/code\u003e\u003c/a\u003e release(core): 1.3.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36990\"\u003e#36990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/9ce72eba9f6b3961d469a70b1b1980543f4cca91\"\u003e\u003ccode\u003e9ce72eb\u003c/code\u003e\u003c/a\u003e feat(core): add content-block-centric streaming (v2) (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36834\"\u003e#36834\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/889a45b664638ef646fa58257cfe263d44cb6c6a\"\u003e\u003ccode\u003e889a45b\u003c/code\u003e\u003c/a\u003e ci(infra): overlay local \u003ccode\u003elangchain-*\u003c/code\u003e installs for external partners (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36989\"\u003e#36989\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/ffaac42bf9e345ec1096d38965f36542a7b0467a\"\u003e\u003ccode\u003effaac42\u003c/code\u003e\u003c/a\u003e ci(infra): add \u003ccode\u003epytest-xdist\u003c/code\u003e to partner test groups (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36988\"\u003e#36988\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/cc2feb1aea239556fa427fd8bdabbae60f8279a6\"\u003e\u003ccode\u003ecc2feb1\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36982\"\u003e#36982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/3dd0ad958eb2d5a51a4055e104598bb26aeb3b65\"\u003e\u003ccode\u003e3dd0ad9\u003c/code\u003e\u003c/a\u003e release(fireworks): 1.2.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36978\"\u003e#36978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/7b09eb7bda4dbe99615ff5e5f74539aea682d718\"\u003e\u003ccode\u003e7b09eb7\u003c/code\u003e\u003c/a\u003e fix(fireworks): honor \u003ccode\u003emax_retries\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36973\"\u003e#36973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/d30ef8a8aa2edd47c614838c6be362456be5c2a5\"\u003e\u003ccode\u003ed30ef8a\u003c/code\u003e\u003c/a\u003e feat(fireworks): populate \u003ccode\u003eusage_metadata\u003c/code\u003e on streaming (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36977\"\u003e#36977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/2715a7499a642c99901e6cfe5e9a6ea3aecedb0f\"\u003e\u003ccode\u003e2715a74\u003c/code\u003e\u003c/a\u003e fix(fireworks): swap undeployed Kimi K2 slug in integration tests (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36975\"\u003e#36975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/2d3b49162caca316d9a24286421737471ea9e388\"\u003e\u003ccode\u003e2d3b491\u003c/code\u003e\u003c/a\u003e ci(infra): shorten working-directory dropdown labels (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36974\"\u003e#36974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain-core==1.3.0...langchain-core==1.3.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langgraph` from 1.1.8 to 1.1.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langgraph/releases\"\u003elanggraph's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elanggraph==1.1.9\u003c/h2\u003e\n\u003cp\u003eChanges since 1.1.8\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003echore(langgraph): bump version 1.1.8 -\u0026gt; 1.1.9 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7563\"\u003e#7563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): don't propagate ReplayState to subgraphs on plain resume (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7561\"\u003e#7561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(langgraph): undo unnecessary changes in stream handler (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7536\"\u003e#7536\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/a529b9bede1f1b6ecada4f0cc0e5c4b83526e563\"\u003e\u003ccode\u003ea529b9b\u003c/code\u003e\u003c/a\u003e chore(langgraph): bump version 1.1.8 -\u0026gt; 1.1.9 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7563\"\u003e#7563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/0a26b471d34da94186bee8c48d0c463b5a3bd0a0\"\u003e\u003ccode\u003e0a26b47\u003c/code\u003e\u003c/a\u003e fix(langgraph): don't propagate ReplayState to subgraphs on plain resume (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7561\"\u003e#7561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/b674dd46228b0928a6bc0ad9a3d8e38ef28f6895\"\u003e\u003ccode\u003eb674dd4\u003c/code\u003e\u003c/a\u003e feat(prebuilt): expose available tools on ToolRuntime (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7512\"\u003e#7512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/8df0a377d00839bee0b7e9645b225716db8958d1\"\u003e\u003ccode\u003e8df0a37\u003c/code\u003e\u003c/a\u003e chore(langgraph): undo unnecessary changes in stream handler (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7536\"\u003e#7536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/216cf33a54d401d80338e2a0d22827b63310a3e0\"\u003e\u003ccode\u003e216cf33\u003c/code\u003e\u003c/a\u003e chore(deps): bump the pip group across 3 directories with 1 update (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7537\"\u003e#7537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/langchain-ai/langgraph/compare/1.1.8...1.1.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anthropic` from 0.96.0 to 0.97.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/releases\"\u003eanthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.97.0\u003c/h2\u003e\n\u003ch2\u003e0.97.0 (2026-04-23)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.96.0...v0.97.0\"\u003ev0.96.0...v0.97.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e CMA Memory public beta (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/fc30ebe5ca81204faa0b1d756b61dad176e37dcb\"\u003efc30ebe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix errors in api spec (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f946de8da00748b472489e93ab4920d64d1cb22d\"\u003ef946de8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore missing features (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/72212ab8408af389981e9e6b111c00460b2b17e4\"\u003e72212ab\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e optimize file structure copying in multipart requests (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/1f9eed3a953c8cef0967df8470e04f7ac8fe3235\"\u003e1f9eed3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd missing import (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/4b12f5e0f4c29a234cd05f93c603b9cae2011aaa\"\u003e4b12f5e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e more robust bootstrap script (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/7ed737089d1f28385ee827f601ba81f1935d0b6a\"\u003e7ed7370\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.22.1 (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a4b7184e57410ae92a409db5ee6fec90edceaa51\"\u003ea4b7184\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md\"\u003eanthropic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.97.0 (2026-04-23)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.96.0...v0.97.0\"\u003ev0.96.0...v0.97.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e CMA Memory public beta (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/fc30ebe5ca81204faa0b1d756b61dad176e37dcb\"\u003efc30ebe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix errors in api spec (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f946de8da00748b472489e93ab4920d64d1cb22d\"\u003ef946de8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore missing features (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/72212ab8408af389981e9e6b111c00460b2b17e4\"\u003e72212ab\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e optimize file structure copying in multipart requests (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/1f9eed3a953c8cef0967df8470e04f7ac8fe3235\"\u003e1f9eed3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd missing import (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/4b12f5e0f4c29a234cd05f93c603b9cae2011aaa\"\u003e4b12f5e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e more robust bootstrap script (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/7ed737089d1f28385ee827f601ba81f1935d0b6a\"\u003e7ed7370\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.22.1 (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a4b7184e57410ae92a409db5ee6fec90edceaa51\"\u003ea4b7184\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/78c73600b714fcb036893768df8ee122f33d4cb3\"\u003e\u003ccode\u003e78c7360\u003c/code\u003e\u003c/a\u003e release: 0.97.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d274533036e250506f665011d8d3441ed5228944\"\u003e\u003ccode\u003ed274533\u003c/code\u003e\u003c/a\u003e chore: add missing import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/c078db11d55c5b0455272e85617d8c1cfe76180e\"\u003e\u003ccode\u003ec078db1\u003c/code\u003e\u003c/a\u003e fix(api): fix errors in api spec\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5807d0efd8fac5fb7323dbd8949a2df8528a3456\"\u003e\u003ccode\u003e5807d0e\u003c/code\u003e\u003c/a\u003e fix(api): restore missing features\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/2cb7a83a029aa3bd960536158f16231fe0ad6d0d\"\u003e\u003ccode\u003e2cb7a83\u003c/code\u003e\u003c/a\u003e feat(api): CMA Memory public beta\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/edbddf7715a78e56ab019737977e4e2db60acf1b\"\u003e\u003ccode\u003eedbddf7\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/4d3e27c78b404f7a3fcb7b1cd2221033e615574b\"\u003e\u003ccode\u003e4d3e27c\u003c/code\u003e\u003c/a\u003e chore(internal): more robust bootstrap script\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d2b3cda70e3c3b2bc153a9a486f90c3111bd4323\"\u003e\u003ccode\u003ed2b3cda\u003c/code\u003e\u003c/a\u003e chore(tests): bump steady to v0.22.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5871ccb66966dc2b6a3a33b8c8bf419512d830b8\"\u003e\u003ccode\u003e5871ccb\u003c/code\u003e\u003c/a\u003e perf(client): optimize file structure copying in multipart requests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b4fba031da1b33c80aa5104e84a7babda3b847f5\"\u003e\u003ccode\u003eb4fba03\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.96.0...v0.97.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.2.25 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certi...\n\n_Description has been truncated_","html_url":"https://github.com/AhmedAmineBejaoui/ai-code-review-platform/pull/77","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmedAmineBejaoui%2Fai-code-review-platform/issues/77","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/77/packages"},{"uuid":"4340094671","node_id":"PR_kwDOMFeY887WLVLy","number":173,"state":"open","title":"python-deps(deps): bump the python-dependencies group across 1 directory with 17 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":["dependabot[bot]"],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-04-28T02:14:36.000Z","updated_at":"2026-04-28T02:18:50.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"python-deps(deps): bump","group_name":"python-dependencies","update_count":17,"packages":[{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"mkdocs-section-index","old_version":"0.3.11","new_version":"0.3.12","repository_url":"https://github.com/oprypin/mkdocs-section-index"},{"name":"mkdocstrings","old_version":"1.0.3","new_version":"1.0.4","repository_url":"https://github.com/mkdocstrings/mkdocstrings"},{"name":"packaging","old_version":"26.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pytest","old_version":"9.0.2","new_version":"9.0.3","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-order","old_version":"1.3.0","new_version":"1.4.0","repository_url":"https://github.com/pytest-dev/pytest-order"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"chardet","old_version":"5.2.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"charset-normalizer","old_version":"3.4.6","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"click","old_version":"8.3.1","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pydantic](https://github.com/pydantic/pydantic), [pyright](https://github.com/RobertCraigie/pyright-python), [wheel](https://github.com/pypa/wheel), [mkdocs-section-index](https://github.com/oprypin/mkdocs-section-index), [mkdocstrings](https://github.com/mkdocstrings/mkdocstrings), [packaging](https://github.com/pypa/packaging), [pytest](https://github.com/pytest-dev/pytest), [pytest-order](https://github.com/pytest-dev/pytest-order), [certifi](https://github.com/certifi/python-certifi), [chardet](https://github.com/chardet/chardet), [charset-normalizer](https://github.com/jawah/charset_normalizer), [idna](https://github.com/kjd/idna), [click](https://github.com/pallets/click), [more-itertools](https://github.com/more-itertools/more-itertools), [pathspec](https://github.com/cpburnz/python-pathspec), [platformdirs](https://github.com/tox-dev/platformdirs) and [pydantic-core](https://github.com/pydantic/pydantic) to permit the latest version.\nUpdates `pydantic` from 2.12.5 to 2.13.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.0 2026-04-13\u003c/h2\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.13/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 contains the updated \u003ccode\u003epydantic.v1\u003c/code\u003e namespace, matching version 1.10.26 which includes support for Python 3.14.\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eSee the beta releases for all changes sinces 2.12.\u003c/p\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd zizmor for GitHub Actions workflow linting by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13039\"\u003e#13039\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate jiter to v0.14.0 to fix a segmentation fault on musl Linux by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13064\"\u003e#13064\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.1\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.13/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 contains the updated \u003ccode\u003epydantic.v1\u003c/code\u003e namespace, matching version 1.10.26 which includes support for Python 3.14.\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eSee the beta releases for all changes sinces 2.12.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow default factories of private attributes to take validated model data by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13013\"\u003e#13013\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\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/pydantic/pydantic/commit/9e9a11132c980c4ec84ff6d2df06d4c1a55ca8f3\"\u003e\u003ccode\u003e9e9a111\u003c/code\u003e\u003c/a\u003e Fix backported test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1ec8c6aa0cae1c78409c6f31af738a24e16c7124\"\u003e\u003ccode\u003e1ec8c6a\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/fb4f2044436e9fa4ff9745479ce263016a99c4d6\"\u003e\u003ccode\u003efb4f204\u003c/code\u003e\u003c/a\u003e Handle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/ca3ddd1149bd3b14273922a29da174804496a055\"\u003e\u003ccode\u003eca3ddd1\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/000e823a3ab7545b0c6064fde34effdcd02044ab\"\u003e\u003ccode\u003e000e823\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d45d8be3ffb6dfc6d0c64da6980140c91ff841fb\"\u003e\u003ccode\u003ed45d8be\u003c/code\u003e\u003c/a\u003e Prepare release 2.13.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/54aca609ce58e73dfe1c681d93432fbe3a4621da\"\u003e\u003ccode\u003e54aca60\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/46bf4fa648af3a1fbf4603a37f210e9d9c618357\"\u003e\u003ccode\u003e46bf4fa\u003c/code\u003e\u003c/a\u003e Fix Pydantic release workflow (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13067\"\u003e#13067\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1b359edab09c623464d23c6fd2503ae5ff276d43\"\u003e\u003ccode\u003e1b359ed\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13065\"\u003e#13065\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b1bf19445d8ac144a7a0e82674d2d87eebab6c18\"\u003e\u003ccode\u003eb1bf194\u003c/code\u003e\u003c/a\u003e Fix model equality when using runtime \u003ccode\u003eextra\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13062\"\u003e#13062\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.5...v2.13.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyright` to 1.1.409\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/RobertCraigie/pyright-python/commit/d7508e5425d3d02761d70dab1f9a2086573af429\"\u003e\u003ccode\u003ed7508e5\u003c/code\u003e\u003c/a\u003e [pyright updated to 1.1.409] Update Version (\u003ca href=\"https://redirect.github.com/RobertCraigie/pyright-python/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/RobertCraigie/pyright-python/compare/v1.1.408...v1.1.409\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `wheel` to 0.47.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/wheel/releases\"\u003ewheel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.47.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003ewheel info\u003c/code\u003e subcommand to display metadata about wheel files without unpacking them (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/639\"\u003e#639\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eWheelFile\u003c/code\u003e raising \u003ccode\u003eMissing RECORD file\u003c/code\u003e when the wheel filename contains uppercase characters (e.g. \u003ccode\u003eDjango-3.2.5.whl\u003c/code\u003e) but the \u003ccode\u003e.dist-info\u003c/code\u003e directory inside uses normalized lowercase naming (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/411\"\u003e#411\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/wheel/blob/main/docs/news.rst\"\u003ewheel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease Notes\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003e0.47.0 (2026-04-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003ewheel info\u003c/code\u003e subcommand to display metadata about wheel files without\nunpacking them (\u003ccode\u003e[#639](https://github.com/pypa/wheel/issues/639) \u0026lt;https://github.com/pypa/wheel/issues/639\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eWheelFile\u003c/code\u003e raising \u003ccode\u003eMissing RECORD file\u003c/code\u003e when the wheel filename contains\nuppercase characters (e.g. \u003ccode\u003eDjango-3.2.5.whl\u003c/code\u003e) but the \u003ccode\u003e.dist-info\u003c/code\u003e directory\ninside uses normalized lowercase naming\n(\u003ccode\u003e[#411](https://github.com/pypa/wheel/issues/411) \u0026lt;https://github.com/pypa/wheel/issues/411\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.3 (2026-01-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eImportError: cannot import name '_setuptools_logging' from 'wheel'\u003c/code\u003e when\ninstalled alongside an old version of setuptools and running the \u003ccode\u003ebdist_wheel\u003c/code\u003e\ncommand (\u003ccode\u003e[#676](https://github.com/pypa/wheel/issues/676) \u0026lt;https://github.com/pypa/wheel/issues/676\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.2 (2026-01-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRestored the \u003ccode\u003ebdist_wheel\u003c/code\u003e command for compatibility with \u003ccode\u003esetuptools\u003c/code\u003e older than\nv70.1\u003c/li\u003e\n\u003cli\u003eImporting \u003ccode\u003ewheel.bdist_wheel\u003c/code\u003e now emits a \u003ccode\u003eFutureWarning\u003c/code\u003e instead of a\n\u003ccode\u003eDeprecationWarning\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003ewheel unpack\u003c/code\u003e potentially altering the permissions of files outside of the\ndestination tree with maliciously crafted wheels (CVE-2026-24049)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.1 (2025-04-08)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTemporarily restored the \u003ccode\u003ewheel.macosx_libfile\u003c/code\u003e module\n(\u003ccode\u003e[#659](https://github.com/pypa/wheel/issues/659) \u0026lt;https://github.com/pypa/wheel/issues/659\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.0 (2025-04-03)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.8\u003c/li\u003e\n\u003cli\u003eRemoved the \u003ccode\u003ebdist_wheel\u003c/code\u003e setuptools command implementation and entry point.\nThe \u003ccode\u003ewheel.bdist_wheel\u003c/code\u003e module is now just an alias to\n\u003ccode\u003esetuptools.command.bdist_wheel\u003c/code\u003e, emitting a deprecation warning on import.\u003c/li\u003e\n\u003cli\u003eRemoved vendored \u003ccode\u003epackaging\u003c/code\u003e in favor of a run-time dependency on it\u003c/li\u003e\n\u003cli\u003eMade the \u003ccode\u003ewheel.metadata\u003c/code\u003e module private (with a deprecation warning if it's\nimported\u003c/li\u003e\n\u003cli\u003eMade the \u003ccode\u003ewheel.cli\u003c/code\u003e package private (no deprecation warning)\u003c/li\u003e\n\u003cli\u003eFixed an exception when calling the \u003ccode\u003econvert\u003c/code\u003e command with an empty description\nfield\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.45.1 (2024-11-23)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed pure Python wheels converted from eggs and wininst files having the ABI tag in\nthe file name\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/efd83a750f07a33462ea2eed365fd8dac9e51442\"\u003e\u003ccode\u003eefd83a7\u003c/code\u003e\u003c/a\u003e Created a new release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/bb69216d35588c2a0febc2d9a130727fe6e46ee3\"\u003e\u003ccode\u003ebb69216\u003c/code\u003e\u003c/a\u003e Reordered the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/d5a1763ce927618bfa7d82abe334d0d14a93cc37\"\u003e\u003ccode\u003ed5a1763\u003c/code\u003e\u003c/a\u003e fix(wheelfile): resolve .dist-info path case-insensitively when reading wheel...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/5718957928ece25eb0d1c12023c71dea4fcb5cf9\"\u003e\u003ccode\u003e5718957\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/625806845ae5756be3cc0f9d44832c29079c0954\"\u003e\u003ccode\u003e6258068\u003c/code\u003e\u003c/a\u003e chore: log_level is better than log_cli_level (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/2975debc789682b3a448b134611acc6962a93eb3\"\u003e\u003ccode\u003e2975deb\u003c/code\u003e\u003c/a\u003e Require tox \u0026gt;= 4.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/47674ba770e5ee72d679b7eb32b558e0c177640d\"\u003e\u003ccode\u003e47674ba\u003c/code\u003e\u003c/a\u003e chore: add check-sdist to checks (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/681\"\u003e#681\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/56223f6f8dfa8d3d40923f24dcf159204698d7b6\"\u003e\u003ccode\u003e56223f6\u003c/code\u003e\u003c/a\u003e \u003ccode\u003e__package__\u003c/code\u003e → \u003ccode\u003e__spec__.parent\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/679\"\u003e#679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/0ce509e02dc3cd1b7b0bdf868482de062b3c21c3\"\u003e\u003ccode\u003e0ce509e\u003c/code\u003e\u003c/a\u003e Added the wheel info subcommand (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/669\"\u003e#669\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/39039c0f3446c1ed5ec52621e98bc2bad8178a06\"\u003e\u003ccode\u003e39039c0\u003c/code\u003e\u003c/a\u003e Improved the index page\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/wheel/compare/0.46.3...0.47.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-section-index` from 0.3.11 to 0.3.12\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/releases\"\u003emkdocs-section-index's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.3.12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeclare support of \u003ca href=\"https://pypi.org/project/properdocs-theme-readthedocs/\"\u003eproperdocs-theme-readthedocs\u003c/a\u003e, such that there is no warning printed for it - \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/fefc63086bfe41d0bd91f7541721ab4f96db25dc\"\u003ehttps://github.com/oprypin/mkdocs-section-index/commit/fefc63086bfe41d0bd91f7541721ab4f96db25dc\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/compare/v0.3.11...v0.3.12\"\u003ehttps://github.com/oprypin/mkdocs-section-index/compare/v0.3.11...v0.3.12\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/oprypin/mkdocs-section-index/commit/869bbda96ac29b178cddfff57cabe8884563afde\"\u003e\u003ccode\u003e869bbda\u003c/code\u003e\u003c/a\u003e v0.3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/5ec1820d48bed54a880405edc93f1ce682e004d6\"\u003e\u003ccode\u003e5ec1820\u003c/code\u003e\u003c/a\u003e Fix a doc link so it doesn't only work on GitHub\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/2a898e8022f22bfd86ba5b8c60e0b0a0cc6089e9\"\u003e\u003ccode\u003e2a898e8\u003c/code\u003e\u003c/a\u003e Update docs dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/fefc63086bfe41d0bd91f7541721ab4f96db25dc\"\u003e\u003ccode\u003efefc630\u003c/code\u003e\u003c/a\u003e Declare support of properdocs-theme-readthedocs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/4d758be189becb315f12607146737c83ca922a3b\"\u003e\u003ccode\u003e4d758be\u003c/code\u003e\u003c/a\u003e Update deps, enable more lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/8cea221e6781c7e616cba249f46c957408a91590\"\u003e\u003ccode\u003e8cea221\u003c/code\u003e\u003c/a\u003e Drop Python 3.9, switch doc building to ProperDocs\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/compare/v0.3.11...v0.3.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocstrings` from 1.0.3 to 1.0.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases\"\u003emkdocstrings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.4\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.4\"\u003e1.0.4\u003c/a\u003e - 2026-04-15\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003eCompare with 1.0.3\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd timeout when downloading inventories (10 seconds) (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e3d1969a\u003c/a\u003e by Simon Lloyd). \u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/819\"\u003eIssue-819\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/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md\"\u003emkdocstrings's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.4\"\u003e1.0.4\u003c/a\u003e - 2026-04-15\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003eCompare with 1.0.3\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd timeout when downloading inventories (10 seconds) (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e3d1969a\u003c/a\u003e by Simon Lloyd). \u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/819\"\u003eIssue-819\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/mkdocstrings/mkdocstrings/commit/a938528b51b42cde52465d06d8b1a52484837366\"\u003e\u003ccode\u003ea938528\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/1eaa2242ec33e4b6ce666f0bbc25391f2a72c1d2\"\u003e\u003ccode\u003e1eaa224\u003c/code\u003e\u003c/a\u003e ci: Lint and type-check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/80e090d0bfbfa5688639e78559a4bb7bd3f7a55b\"\u003e\u003ccode\u003e80e090d\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/5f82a5822c50dc928ee4a133c1445543d3afa393\"\u003e\u003ccode\u003e5f82a58\u003c/code\u003e\u003c/a\u003e chore: Template upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e\u003ccode\u003e3d1969a\u003c/code\u003e\u003c/a\u003e fix: Add timeout when downloading inventories (10 seconds)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/a0c47b9992416cf02b8dfc7a76a6c5503e98cd9c\"\u003e\u003ccode\u003ea0c47b9\u003c/code\u003e\u003c/a\u003e docs: Fix broken link in README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/e500a2b416656ede76aac316304415e428dd0aa1\"\u003e\u003ccode\u003ee500a2b\u003c/code\u003e\u003c/a\u003e chore: Update sponsors section in README\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `packaging` from 26.0 to 26.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/releases\"\u003epackaging's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix incorrect sysconfig var name for pyemscripten by \u003ca href=\"https://github.com/ryanking13\"\u003e\u003ccode\u003e@​ryanking13\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1160\"\u003epypa/packaging#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003eVersion\u003c/code\u003e, \u003ccode\u003eSpecifier\u003c/code\u003e, \u003ccode\u003eSpecifierSet\u003c/code\u003e, \u003ccode\u003eTag\u003c/code\u003e, \u003ccode\u003eMarker\u003c/code\u003e, and \u003ccode\u003eRequirement\u003c/code\u003e pickle-safe\nand backward-compatible with pickles created in 25.0-26.1 (including references to the removed\n\u003ccode\u003epackaging._structures\u003c/code\u003e module) by \u003ca href=\"https://github.com/eachimei\"\u003e\u003ccode\u003e@​eachimei\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1163\"\u003epypa/packaging#1163\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1168\"\u003epypa/packaging#1168\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1170\"\u003epypa/packaging#1170\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1171\"\u003epypa/packaging#1171\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: re-export ExceptionGroup for now by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1164\"\u003epypa/packaging#1164\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDocumentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edocs: add errors section and fix missing details by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1159\"\u003epypa/packaging#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs(dev): document property-based test suite by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1167\"\u003epypa/packaging#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in DirectUrl documentation by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1169\"\u003epypa/packaging#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs(specifiers): add is_unsatisfiable() usage example by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1166\"\u003epypa/packaging#1166\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnable the auditor persona on zizmor by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1158\"\u003epypa/packaging#1158\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTest new pickle guarantees by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1174\"\u003epypa/packaging#1174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse native uv integration in rtd by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1175\"\u003epypa/packaging#1175\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ryanking13\"\u003e\u003ccode\u003e@​ryanking13\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1160\"\u003epypa/packaging#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/eachimei\"\u003e\u003ccode\u003e@​eachimei\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1163\"\u003epypa/packaging#1163\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/packaging/compare/26.1...26.2\"\u003ehttps://github.com/pypa/packaging/compare/26.1...26.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e26.1\u003c/h2\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cdel\u003ePEP 783: add handling for Emscripten wheel tags by \u003ca href=\"https://github.com/hoodmane\"\u003e\u003ccode\u003e@​hoodmane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/804\"\u003epypa/packaging#804\u003c/a\u003e\u003c/del\u003e (old name used in implementation, will be fixed in next release)\u003c/li\u003e\n\u003cli\u003ePEP 803: add handling for the \u003ccode\u003eabi3.abi3t\u003c/code\u003e free-threading tag by \u003ca href=\"https://github.com/ngoldbaum\"\u003e\u003ccode\u003e@​ngoldbaum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1099\"\u003epypa/packaging#1099\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePEP 723: add \u003ccode\u003epackaging.dependency_groups\u003c/code\u003e module, based on the \u003ccode\u003edependency-groups\u003c/code\u003e package by \u003ca href=\"https://github.com/sirosen\"\u003e\u003ccode\u003e@​sirosen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1065\"\u003epypa/packaging#1065\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.direct_url\u003c/code\u003e module by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/944\"\u003epypa/packaging#944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.errors\u003c/code\u003e module by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1071\"\u003epypa/packaging#1071\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e using ranges (new internals that will be expanded in future versions) by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1119\"\u003epypa/packaging#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecreate_compatible_tags_selector\u003c/code\u003e to select compatible tags by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1110\"\u003epypa/packaging#1110\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ekey\u003c/code\u003e argument to \u003ccode\u003eSpecifierSet.filter()\u003c/code\u003e by \u003ca href=\"https://github.com/frostming\"\u003e\u003ccode\u003e@​frostming\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1068\"\u003epypa/packaging#1068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003e\u0026amp;\u003c/code\u003e and \u003ccode\u003e|\u003c/code\u003e for \u003ccode\u003eMarker\u003c/code\u003e's by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1146\"\u003epypa/packaging#1146\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNormalize \u003ccode\u003eVersion.__replace__\u003c/code\u003e and add \u003ccode\u003eVersion.from_parts\u003c/code\u003e by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1078\"\u003epypa/packaging#1078\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd an option to validate compressed tag set sort order in \u003ccode\u003eparse_wheel_filename\u003c/code\u003e by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1150\"\u003epypa/packaging#1150\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBehavior adaptations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow exclusion of pre-releases for \u003ccode\u003e\u0026lt;V.postN\u003c/code\u003e to match spec by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1140\"\u003epypa/packaging#1140\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/blob/main/CHANGELOG.rst\"\u003epackaging's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e26.2 - 2026-04-24\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\nFixes:\n\u003cul\u003e\n\u003cli\u003eFix incorrect sysconfig var name for pyemscripten in (:pull:\u003ccode\u003e1160\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003eVersion\u003c/code\u003e, \u003ccode\u003eSpecifier\u003c/code\u003e, \u003ccode\u003eSpecifierSet\u003c/code\u003e, \u003ccode\u003eTag\u003c/code\u003e, \u003ccode\u003eMarker\u003c/code\u003e, and \u003ccode\u003eRequirement\u003c/code\u003e pickle-safe\u003cbr /\u003e\nand backward-compatible with pickles created in 25.0-26.1 (including references to the removed\u003cbr /\u003e\n\u003ccode\u003epackaging._structures\u003c/code\u003e module) (:pull:\u003ccode\u003e1163\u003c/code\u003e, :pull:\u003ccode\u003e1168\u003c/code\u003e, :pull:\u003ccode\u003e1170\u003c/code\u003e, :pull:\u003ccode\u003e1171\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRe-export \u003ccode\u003eExceptionGroup\u003c/code\u003e in metadata for now in (:pull:\u003ccode\u003e1164\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDocumentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd errors section and fix missing details in (:pull:\u003ccode\u003e1159\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDocument our property-based test suite in (:pull:\u003ccode\u003e1167\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix a \u003ccode\u003eDirectUrl\u003c/code\u003e typo in (:pull:\u003ccode\u003e1167\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd example of \u003ccode\u003eis_unsatisfiable\u003c/code\u003e in (:pull:\u003ccode\u003e1166\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnable the auditor persona on zizmor in (:pull:\u003ccode\u003e1158\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eTest new pickle guarantees in (:pull:\u003ccode\u003e1174\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eUse new native ReadTheDocs uv integration in (:pull:\u003ccode\u003e1175\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e26.1 - 2026-04-14\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePEP 783: add handling for Emscripten wheel tags in (:pull:\u003ccode\u003e804\u003c/code\u003e) (old name used in implementation, fixed in next release)\u003c/li\u003e\n\u003cli\u003ePEP 803: add handling for the \u003ccode\u003eabi3.abi3t\u003c/code\u003e free-threading tag in (:pull:\u003ccode\u003e1099\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePEP 723: add \u003ccode\u003epackaging.dependency_groups\u003c/code\u003e module, based on the \u003ccode\u003edependency-groups\u003c/code\u003e package in (:pull:\u003ccode\u003e1065\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.direct_url\u003c/code\u003e module in (:pull:\u003ccode\u003e944\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.errors\u003c/code\u003e module in (:pull:\u003ccode\u003e1071\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e using ranges (new internals that will be expanded in future versions) in (:pull:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecreate_compatible_tags_selector\u003c/code\u003e to select compatible tags in (:pull:\u003ccode\u003e1110\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ekey\u003c/code\u003e argument to \u003ccode\u003eSpecifierSet.filter()\u003c/code\u003e in (:pull:\u003ccode\u003e1068\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003e\u0026amp;\u003c/code\u003e and \u003ccode\u003e|\u003c/code\u003e for \u003ccode\u003eMarker\u003c/code\u003e's in (:pull:\u003ccode\u003e1146\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eNormalize \u003ccode\u003eVersion.__replace__\u003c/code\u003e and add \u003ccode\u003eVersion.from_parts\u003c/code\u003e in (:pull:\u003ccode\u003e1078\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd an option to validate compressed tag set sort order in \u003ccode\u003eparse_wheel_filename\u003c/code\u003e in (:pull:\u003ccode\u003e1150\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBehavior adaptations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow exclusion of pre-releases for \u003ccode\u003e\u0026lt;V.postN\u003c/code\u003e to match spec in (:pull:\u003ccode\u003e1140\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eNarrow exclusion of post-releases for \u003ccode\u003e\u0026gt;V\u003c/code\u003e to match spec in (:pull:\u003ccode\u003e1141\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003eformat_full_version\u003c/code\u003e to \u003ccode\u003e_format_full_version\u003c/code\u003e to make it visibly private in (:pull:\u003ccode\u003e1125\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict local version to ASCII in (:pull:\u003ccode\u003e1102\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePylock (PEP 751) updates:\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/84a87ee42483d7352f9502d78a9553da8859aa7a\"\u003e\u003ccode\u003e84a87ee\u003c/code\u003e\u003c/a\u003e Bump for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/4a616b65bed23c8c6d58e6b0fc1a4434d4ff1f14\"\u003e\u003ccode\u003e4a616b6\u003c/code\u003e\u003c/a\u003e docs: a few more updates to prepare for 26.2 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1176\"\u003e#1176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/9de6f44f1e82d4595edf3aad1c4f6f98c85935a0\"\u003e\u003ccode\u003e9de6f44\u003c/code\u003e\u003c/a\u003e ci: use native uv integration in rtd (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1175\"\u003e#1175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/bc76e14debd1a2799d1ca8f9d9c9823f35bfa466\"\u003e\u003ccode\u003ebc76e14\u003c/code\u003e\u003c/a\u003e chore: update changelog for 26.2 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1161\"\u003e#1161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/3f00091c08f0aa830e33ed7db00f16f11c8ac97f\"\u003e\u003ccode\u003e3f00091\u003c/code\u003e\u003c/a\u003e tests: add a pickle check (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1174\"\u003e#1174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/48a8a069805291186522de3eff73ea80a8ca96ad\"\u003e\u003ccode\u003e48a8a06\u003c/code\u003e\u003c/a\u003e fix: make Requirements/Markers pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1171\"\u003e#1171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/823b44ed1f904084a77ae3adf0ef130af6365f84\"\u003e\u003ccode\u003e823b44e\u003c/code\u003e\u003c/a\u003e fix: make Tags pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1170\"\u003e#1170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/4bed32d920ca7211dd65fdf0a1ee06376e9c4733\"\u003e\u003ccode\u003e4bed32d\u003c/code\u003e\u003c/a\u003e fix: make Specifier / SpecifierSet pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1168\"\u003e#1168\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/963118e37caae97bc8b72f72956c7fb4ca9857ec\"\u003e\u003ccode\u003e963118e\u003c/code\u003e\u003c/a\u003e fix: re-export ExceptionGroup for now (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1164\"\u003e#1164\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/66e34a80256c96dea11da143682950c84b8133bb\"\u003e\u003ccode\u003e66e34a8\u003c/code\u003e\u003c/a\u003e docs(specifiers): add is_unsatisfiable() usage example (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1166\"\u003e#1166\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/packaging/compare/26.0...26.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 9.0.2 to 9.0.3\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.0.3\u003c/h2\u003e\n\u003ch1\u003epytest 9.0.3 (2026-04-07)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12444\"\u003e#12444\u003c/a\u003e: Fixed \u003ccode\u003epytest.approx\u003c/code\u003e which now correctly takes into account \u003ccode\u003e~collections.abc.Mapping\u003c/code\u003e keys order to compare them.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13634\"\u003e#13634\u003c/a\u003e: Blocking a \u003ccode\u003econftest.py\u003c/code\u003e file using the \u003ccode\u003e-p no:\u003c/code\u003e option is now explicitly disallowed.\u003c/p\u003e\n\u003cp\u003ePreviously this resulted in an internal assertion failure during plugin loading.\u003c/p\u003e\n\u003cp\u003ePytest now raises a clear \u003ccode\u003eUsageError\u003c/code\u003e explaining that conftest files are not plugins and cannot be disabled via \u003ccode\u003e-p\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/13734\"\u003e#13734\u003c/a\u003e: Fixed crash when a test raises an exceptiongroup with \u003ccode\u003e__tracebackhide__ = True\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/14195\"\u003e#14195\u003c/a\u003e: Fixed an issue where non-string messages passed to \u003c!-- raw HTML omitted --\u003eunittest.TestCase.subTest()\u003c!-- raw HTML omitted --\u003e were not printed.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14343\"\u003e#14343\u003c/a\u003e: Fixed use of insecure temporary directory (CVE-2025-71176).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13388\"\u003e#13388\u003c/a\u003e: Clarified documentation for \u003ccode\u003e-p\u003c/code\u003e vs \u003ccode\u003ePYTEST_PLUGINS\u003c/code\u003e plugin loading and fixed an incorrect \u003ccode\u003e-p\u003c/code\u003e example.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13731\"\u003e#13731\u003c/a\u003e: Clarified that capture fixtures (e.g. \u003ccode\u003ecapsys\u003c/code\u003e and \u003ccode\u003ecapfd\u003c/code\u003e) take precedence over the \u003ccode\u003e-s\u003c/code\u003e / \u003ccode\u003e--capture=no\u003c/code\u003e command-line options in \u003ccode\u003eAccessing captured output from a test function \u0026lt;accessing-captured-output\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14088\"\u003e#14088\u003c/a\u003e: Clarified that the default \u003ccode\u003epytest_collection\u003c/code\u003e hook sets \u003ccode\u003esession.items\u003c/code\u003e before it calls \u003ccode\u003epytest_collection_finish\u003c/code\u003e, not after.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14255\"\u003e#14255\u003c/a\u003e: TOML integer log levels must be quoted: Updating reference documentation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12689\"\u003e#12689\u003c/a\u003e: The test reports are now published to Codecov from GitHub Actions.\nThe test statistics is visible \u003ca href=\"https://app.codecov.io/gh/pytest-dev/pytest/tests\"\u003eon the web interface\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e-- by \u003ccode\u003ealeguy02\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/a7d58d7a21b78581e636bbbdea13c66ad1657c1e\"\u003e\u003ccode\u003ea7d58d7\u003c/code\u003e\u003c/a\u003e Prepare release version 9.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/089d98199c253d8f89a040243bc4f2aa6cd5ab22\"\u003e\u003ccode\u003e089d981\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14366\"\u003e#14366\u003c/a\u003e from bluetech/revert-14193-backport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/8127eaf4ab7f6b2fdd0dc1b38343ec97aeef05ac\"\u003e\u003ccode\u003e8127eaf\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Fix: assertrepr_compare respects dict insertion order (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14050\"\u003e#14050\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14193\"\u003e#14193\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/99a7e6029e7a6e8d53e5df114b1346e035370241\"\u003e\u003ccode\u003e99a7e60\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14363\"\u003e#14363\u003c/a\u003e from pytest-dev/patchback/backports/9.0.x/95d8423bd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ddee02a578da30dd43aedc39c1c1f1aaadfcee95\"\u003e\u003ccode\u003eddee02a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14343\"\u003e#14343\u003c/a\u003e from bluetech/cve-2025-71176-simple\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/74eac6916fee34726cb194f16c516e96fbd29619\"\u003e\u003ccode\u003e74eac69\u003c/code\u003e\u003c/a\u003e doc: Update training info (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14298\"\u003e#14298\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14301\"\u003e#14301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f92dee777cfdb77d1c43633d02766ddf1f07c869\"\u003e\u003ccode\u003ef92dee7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14267\"\u003e#14267\u003c/a\u003e from pytest-dev/patchback/backports/9.0.x/d6fa26c62...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7ee58acc8777c31ac6cf388d01addf5a414a7439\"\u003e\u003ccode\u003e7ee58ac\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12378\"\u003e#12378\u003c/a\u003e from Pierre-Sassoulas/fix-implicit-str-concat-and-d...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/37da870d37e3a2f5177cae075c7b9ae279432bf8\"\u003e\u003ccode\u003e37da870\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14259\"\u003e#14259\u003c/a\u003e from mitre88/patch-4 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14268\"\u003e#14268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c34bfa3b7acb65b594707c714f1d8461b0304eed\"\u003e\u003ccode\u003ec34bfa3\u003c/code\u003e\u003c/a\u003e Add explanation for string context diffs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14257\"\u003e#14257\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14266\"\u003e#14266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.0.2...9.0.3\"\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.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-order/releases\"\u003epytest-order's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\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.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/43375ca14b7a9d50f8645700998dbe2fcd2bcbf5\"\u003e\u003ccode\u003e43375ca\u003c/code\u003e\u003c/a\u003e Release 1.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/0e1d1efc4fa45554fb4db517f12b07dd58ea7f6c\"\u003e\u003ccode\u003e0e1d1ef\u003c/code\u003e\u003c/a\u003e Added option --order-after-ff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/3c5f6f9b5944de8dad81342b38519ecca39e508e\"\u003e\u003ccode\u003e3c5f6f9\u003c/code\u003e\u003c/a\u003e Remove Python 3.9, add Python 3.14 to CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/66dd806fc07b9dd5db76185934f7cdf8b7e3a83a\"\u003e\u003ccode\u003e66dd806\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/6a76a9424a7c6eb5e3c9cac0acf3a5139ccbbd53\"\u003e\u003ccode\u003e6a76a94\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/87112f48676660eac77bac6856d97e5bdcd91653\"\u003e\u003ccode\u003e87112f4\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/4d84b464867c350a4d88d19437eeec90e741b2c8\"\u003e\u003ccode\u003e4d84b46\u003c/code\u003e\u003c/a\u003e Bump codecov/codecov-action from 5 to 6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/9933cf58aef484e2c5f4c6addaa6136d66865cd1\"\u003e\u003ccode\u003e9933cf5\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/f9c43a14905444a557e556d289854596031feccf\"\u003e\u003ccode\u003ef9c43a1\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/783c9b6b6ab8b0741cb39ae10351074e622a34d9\"\u003e\u003ccode\u003e783c9b6\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.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.2.25 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/0a49067eb434e53e1f8df5f7707d5dc05ef9def4\"\u003e\u003ccode\u003e0a49067\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/403\"\u003e#403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/acf6ce8e39e3b125f4349e11904295e4fe4c1bed\"\u003e\u003ccode\u003eacf6ce8\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/feb0ed26163a9417ea0fb8eb52d47e79fcf202ab\"\u003e\u003ccode\u003efeb0ed2\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7.0.0 to 8.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/397\"\u003e#397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d9c11a50369cc377abb40f7909ded3d6da4d98a3\"\u003e\u003ccode\u003ed9c11a5\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6.0.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/396\"\u003e#396\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.04.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `chardet` from 5.2.0 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.6 to 3.4.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.7\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/0f07891bf516b5d5231f1bd4dd2d8da7d4d09a9a\"\u003e\u003ccode\u003e0f07891\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/729\"\u003e#729\u003c/a\u003e from jawah/release-3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fdbeb299479e8f4d737e4d227cd0b2bd5d273dc0\"\u003e\u003ccode\u003efdbeb29\u003c/code\u003e\u003c/a\u003e chore: update dev, and ci requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b66f922bfbdbdd9dd46af18a8964d4fb888756d4\"\u003e\u003ccode\u003eb66f922\u003c/code\u003e\u003c/a\u003e chore: add ft classifier\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/f94249d0a2c712f2d03124f4de6b77f5e03aaa96\"\u003e\u003ccode\u003ef94249d\u003c/code\u003e\u003c/a\u003e chore: add test cases for utf_7 recent fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/95c866f6c984bbd043e7e3ed0628aa4f3f8d5a26\"\u003e\u003ccode\u003e95c866f\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/4f429bb764c7e893f99bb4bceb60856da1baacfb\"\u003e\u003ccode\u003e4f429bb\u003c/code\u003e\u003c/a\u003e chore: bump mypy pre-commit to v1.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b579cd6cab9bd83aa3fc0ca169d4df022bf4888c\"\u003e\u003ccode\u003eb579cd6\u003c/code\u003e\u003c/a\u003e fix: correctly remove SIG remnant in utf-7 decoded string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/58bf944a77cc0883fc46a6ee8edac3549fea5d59\"\u003e\u003ccode\u003e58bf944\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump github/codeql-action from 4.32.4 to 4.35.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/44cf8a1b676a2532a8f1694e62e4f4f98f9132e1\"\u003e\u003ccode\u003e44cf8a1\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/362bc20073f737b1ba4ca2f68cffb0c4cc024d20\"\u003e\u003ccode\u003e362bc20\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump docker/setup-qemu-action from 3.7.0 to 4.0.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.6...3.4.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.11 to 3.13\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.rst\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e3.13 (2026-04-22)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect classification error for codepoint U+A7F1\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e3.12 (2026-04-21)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 17.0.0.\u003c/li\u003e\n\u003cli\u003eIssue a deprecation warning for the transitional argument.\u003c/li\u003e\n\u003cli\u003eAdded lazy-loading to provide some performance improvements.\u003c/li\u003e\n\u003cli\u003eRemoved vestiges of code related to Python 2 support, including\nsegmentation of data structures specific to Jython.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Rodrigo Nogueira for contributions to this release.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/89cdfd27338896cee6b1ee18e64c96ac28684ce0\"\u003e\u003ccode\u003e89cdfd2\u003c/code\u003e\u003c/a\u003e Release v3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1eb068687543118147417a8d8a70674e2c172891\"\u003e\u003ccode\u003e1eb0686\u003c/code\u003e\u003c/a\u003e Pre-release 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5f20d1e41eea3b3873d18d83d7a384784f72a92e\"\u003e\u003ccode\u003e5f20d1e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/220\"\u003e#220\u003c/a\u003e from kjd/unicode-next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/4ea84252ab21e62a79e5a3273746112b5dcfb810\"\u003e\u003ccode\u003e4ea8425\u003c/code\u003e\u003c/a\u003e Regenerate idnadata.py with correct NFKC_CF data\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/fd47341a08bbdcffda33694211ca4de10170cd41\"\u003e\u003ccode\u003efd47341\u003c/code\u003e\u003c/a\u003e Use NFKC_CF from Unicode data files instead of Python's unicodedata module\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/a5304a4cdbd7b31595f8ac42ffdfa88f5b936467\"\u003e\u003ccode\u003ea5304a4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/219\"\u003e#219\u003c/a\u003e from kjd/release-3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d80d6f9254d699961fa2c669a1534cde9d4ee5b6\"\u003e\u003ccode\u003ed80d6f9\u003c/code\u003e\u003c/a\u003e Release v3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1bb44ddb3f2a9dcf97a6ac11aba34e5b6ed31291\"\u003e\u003ccode\u003e1bb44dd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/218\"\u003e#218\u003c/a\u003e from kjd/release-candidate-3.12rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/909c49d15b8d159be163bccc7972116baffdb47b\"\u003e\u003ccode\u003e909c49d\u003c/code\u003e\u003c/a\u003e Release candidate for 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c5459a10370f005dc09921aee3201b5a45699f9d\"\u003e\u003ccode\u003ec5459a1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/217\"\u003e#217\u003c/a\u003e from kjd/housekeeping-2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.11...v3.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.1 to 8.3.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.3.3\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.3 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.3.3/\"\u003ehttps://pypi.org/project/click/8.3.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-3\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-3\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/1026\"\u003e#1026\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1477\"\u003e#1477\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2775\"\u003e#2775\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3298\"\u003e#3298\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3299\"\u003e#3299\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3238\"\u003e#3238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3224\"\u003e#3224\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/654\"\u003e#654\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/824\"\u003e#824\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/843\"\u003e#843\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/951\"\u003e#951\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3235\"\u003e#3235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3177\"\u003e#3177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2836\"\u003e#2836\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2837\"\u003e#2837\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3165\"\u003e#3165\u003c/a\u003e \u003ca href=\"https://redi...\n\n_Description has been truncated_","html_url":"https://github.com/tektronix/tm_data_types/pull/173","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tektronix%2Ftm_data_types/issues/173","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/173/packages"},{"uuid":"4333721116","node_id":"PR_kwDORK4Qs87V2xIQ","number":27,"state":"closed","title":"Bump the pip group across 1 directory with 15 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-04T07:09:50.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-27T06:57:46.000Z","updated_at":"2026-05-04T07:09:52.000Z","time_to_close":605524,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip","update_count":15,"packages":[{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"chardet","old_version":"6.0.0.post1","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"charset-normalizer","old_version":"3.4.4","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.3.1","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"},{"name":"gevent","old_version":"25.9.1","new_version":"26.4.0","repository_url":"https://github.com/gevent/gevent"},{"name":"greenlet","old_version":"3.3.2","new_version":"3.4.0","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"hiredis","old_version":"3.3.0","new_version":"3.3.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"importlib-metadata","old_version":"8.7.1","new_version":"9.0.0","repository_url":"https://github.com/python/importlib_metadata"},{"name":"redis","old_version":"7.2.0","new_version":"7.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"requests","old_version":"2.32.5","new_version":"2.33.1","repository_url":"https://github.com/psf/requests"},{"name":"sentry-sdk","old_version":"2.53.0","new_version":"2.58.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"werkzeug","old_version":"3.1.6","new_version":"3.1.8","repository_url":"https://github.com/pallets/werkzeug"},{"name":"zipp","old_version":"3.23.0","new_version":"3.23.1","repository_url":"https://github.com/jaraco/zipp"},{"name":"zope-interface","old_version":"8.2","new_version":"8.4","repository_url":"https://github.com/zopefoundation/zope.interface"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip group with 15 updates in the /python directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.4.22` |\n| [chardet](https://github.com/chardet/chardet) | `6.0.0.post1` | `7.4.3` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.4` | `3.4.7` |\n| [click](https://github.com/pallets/click) | `8.3.1` | `8.3.3` |\n| [gevent](https://github.com/gevent/gevent) | `25.9.1` | `26.4.0` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.3.2` | `3.4.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.3.0` | `3.3.1` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.13` |\n| [importlib-metadata](https://github.com/python/importlib_metadata) | `8.7.1` | `9.0.0` |\n| [redis](https://github.com/redis/redis-py) | `7.2.0` | `7.4.0` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.1` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.53.0` | `2.58.0` |\n| [werkzeug](https://github.com/pallets/werkzeug) | `3.1.6` | `3.1.8` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.0` | `3.23.1` |\n| [zope-interface](https://github.com/zopefoundation/zope.interface) | `8.2` | `8.4` |\n\n\nUpdates `certifi` from 2026.2.25 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/0a49067eb434e53e1f8df5f7707d5dc05ef9def4\"\u003e\u003ccode\u003e0a49067\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/403\"\u003e#403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/acf6ce8e39e3b125f4349e11904295e4fe4c1bed\"\u003e\u003ccode\u003eacf6ce8\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/feb0ed26163a9417ea0fb8eb52d47e79fcf202ab\"\u003e\u003ccode\u003efeb0ed2\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7.0.0 to 8.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/397\"\u003e#397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d9c11a50369cc377abb40f7909ded3d6da4d98a3\"\u003e\u003ccode\u003ed9c11a5\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6.0.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/396\"\u003e#396\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.04.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `chardet` from 6.0.0.post1 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/6.0.0.post1...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.4 to 3.4.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.7\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\u003cbr /\u003e\nmypyc changed the usual binary output for the optimized wheel. Beware, especially if using PyInstaller or alike. See \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/714\"\u003ejawah/charset_normalizer#714\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/0f07891bf516b5d5231f1bd4dd2d8da7d4d09a9a\"\u003e\u003ccode\u003e0f07891\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/729\"\u003e#729\u003c/a\u003e from jawah/release-3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fdbeb299479e8f4d737e4d227cd0b2bd5d273dc0\"\u003e\u003ccode\u003efdbeb29\u003c/code\u003e\u003c/a\u003e chore: update dev, and ci requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b66f922bfbdbdd9dd46af18a8964d4fb888756d4\"\u003e\u003ccode\u003eb66f922\u003c/code\u003e\u003c/a\u003e chore: add ft classifier\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/f94249d0a2c712f2d03124f4de6b77f5e03aaa96\"\u003e\u003ccode\u003ef94249d\u003c/code\u003e\u003c/a\u003e chore: add test cases for utf_7 recent fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/95c866f6c984bbd043e7e3ed0628aa4f3f8d5a26\"\u003e\u003ccode\u003e95c866f\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/4f429bb764c7e893f99bb4bceb60856da1baacfb\"\u003e\u003ccode\u003e4f429bb\u003c/code\u003e\u003c/a\u003e chore: bump mypy pre-commit to v1.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b579cd6cab9bd83aa3fc0ca169d4df022bf4888c\"\u003e\u003ccode\u003eb579cd6\u003c/code\u003e\u003c/a\u003e fix: correctly remove SIG remnant in utf-7 decoded string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/58bf944a77cc0883fc46a6ee8edac3549fea5d59\"\u003e\u003ccode\u003e58bf944\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump github/codeql-action from 4.32.4 to 4.35.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/44cf8a1b676a2532a8f1694e62e4f4f98f9132e1\"\u003e\u003ccode\u003e44cf8a1\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/362bc20073f737b1ba4ca2f68cffb0c4cc024d20\"\u003e\u003ccode\u003e362bc20\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump docker/setup-qemu-action from 3.7.0 to 4.0.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.4...3.4.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.1 to 8.3.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.3.3\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.3 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.3.3/\"\u003ehttps://pypi.org/project/click/8.3.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-3\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-3\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/1026\"\u003e#1026\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1477\"\u003e#1477\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2775\"\u003e#2775\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3298\"\u003e#3298\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3299\"\u003e#3299\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3238\"\u003e#3238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3224\"\u003e#3224\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/654\"\u003e#654\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/824\"\u003e#824\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/843\"\u003e#843\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/951\"\u003e#951\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3235\"\u003e#3235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3177\"\u003e#3177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2836\"\u003e#2836\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2837\"\u003e#2837\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3165\"\u003e#3165\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3262\"\u003e#3262\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3280\"\u003e#3280\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3111\"\u003e#3111\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3189\"\u003e#3189\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3250\"\u003e#3250\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2865\"\u003e#2865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2879\"\u003e#2879\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.3.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.3.2/\"\u003ehttps://pypi.org/project/click/8.3.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/29\"\u003ehttps://github.com/pallets/click/milestone/29\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.rst\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.3.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-20\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n:issue:\u003ccode\u003e1026\u003c/code\u003e :pr:\u003ccode\u003e1477\u003c/code\u003e :pr:\u003ccode\u003e2775\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. :issue:\u003ccode\u003e3298\u003c/code\u003e :pr:\u003ccode\u003e3299\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. :pr:\u003ccode\u003e3238\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n:issue:\u003ccode\u003e3224\u003c/code\u003e :pr:\u003ccode\u003e3240\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n:issue:\u003ccode\u003e654\u003c/code\u003e :issue:\u003ccode\u003e824\u003c/code\u003e :issue:\u003ccode\u003e843\u003c/code\u003e :pr:\u003ccode\u003e951\u003c/code\u003e :pr:\u003ccode\u003e3235\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. :pr:\u003ccode\u003e3151\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. :pr:\u003ccode\u003e3151\u003c/code\u003e :pr:\u003ccode\u003e3177\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. :issue:\u003ccode\u003e2836\u003c/code\u003e :pr:\u003ccode\u003e2837\u003c/code\u003e :pr:\u003ccode\u003e3165\u003c/code\u003e :pr:\u003ccode\u003e3262\u003c/code\u003e :pr:\u003ccode\u003e3280\u003c/code\u003e\n:pr:\u003ccode\u003e3328\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. :issue:\u003ccode\u003e3111\u003c/code\u003e :pr:\u003ccode\u003e3239\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. :issue:\u003ccode\u003e3189\u003c/code\u003e :pr:\u003ccode\u003e3250\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n:issue:\u003ccode\u003e2865\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. :issue:\u003ccode\u003e2879\u003c/code\u003e :pr:\u003ccode\u003e3248\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.3.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-02\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eflag_value\u003c/code\u003e when \u003ccode\u003eis_flag=False\u003c/code\u003e to allow such options to be\nused without an explicit value. :issue:\u003ccode\u003e3084\u003c/code\u003e :pr:\u003ccode\u003e3152\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eHide \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values as \u003ccode\u003eNone\u003c/code\u003e when using \u003ccode\u003elookup_default()\u003c/code\u003e.\n:issue:\u003ccode\u003e3136\u003c/code\u003e :pr:\u003ccode\u003e3199\u003c/code\u003e :pr:\u003ccode\u003e3202\u003c/code\u003e :pr:\u003ccode\u003e3209\u003c/code\u003e :pr:\u003ccode\u003e3212\u003c/code\u003e :pr:\u003ccode\u003e3224\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c06d2d0a6aee6bcc50bd8257be2a4a592f4e75d0\"\u003e\u003ccode\u003ec06d2d0\u003c/code\u003e\u003c/a\u003e Release 8.3.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/f1f191ecd2c790b161187c78e7c88440e9524e5c\"\u003e\u003ccode\u003ef1f191e\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3343\"\u003e#3343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bb59ba0fd279ca085d1113f0499b6a602ca31081\"\u003e\u003ccode\u003ebb59ba0\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/4a352253c9ff013e36d11e4a6820d36d00ff2cd4\"\u003e\u003ccode\u003e4a35225\u003c/code\u003e\u003c/a\u003e Reduce blast-radius of \u003ccode\u003eUNSET\u003c/code\u003e in \u003ccode\u003edefault_map\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c07bb936de43fd303f9cfbefe248ab23fd2199c8\"\u003e\u003ccode\u003ec07bb93\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into unset-in-default-map\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c7e1ba8448cbcb2cdd9c1c7f4a592e863dcc3995\"\u003e\u003ccode\u003ec7e1ba8\u003c/code\u003e\u003c/a\u003e Reorder \u003ccode\u003eParameterSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/76552ff1e8c85837f911fc34037e702ae4327eda\"\u003e\u003ccode\u003e76552ff\u003c/code\u003e\u003c/a\u003e Show default string in prompt (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/ac5cec5fe54e5a691e7bac17f441ce9498e0744c\"\u003e\u003ccode\u003eac5cec5\u003c/code\u003e\u003c/a\u003e Reorder ParameterSource from most to least explicit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c452e00e6772931b7071d9316b82b77e5b8f280\"\u003e\u003ccode\u003e8c452e0\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into show-default-string-in-prompt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c95c73bd5ef89eac638f85f1904a104ba4b1a32\"\u003e\u003ccode\u003e8c95c73\u003c/code\u003e\u003c/a\u003e Reconcile default value passing and default activation (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.3.1...8.3.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gevent` from 25.9.1 to 26.4.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/2a096a958289611925b4b4475aaefe74815b6b0f\"\u003e\u003ccode\u003e2a096a9\u003c/code\u003e\u003c/a\u003e Preparing release 26.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/e80421d28dd4281c6ae78dd8eb2a83df85d39b0a\"\u003e\u003ccode\u003ee80421d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2171\"\u003e#2171\u003c/a\u003e from gevent/ci-py-ver-updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/6cfa49b74367e979f27db238f929508ec2a00dcf\"\u003e\u003ccode\u003e6cfa49b\u003c/code\u003e\u003c/a\u003e test__ssl.py: PROTOCOL_TLS deprecation fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/e2ec5ebbe3e10cea407bc28283cc906b809467c9\"\u003e\u003ccode\u003ee2ec5eb\u003c/code\u003e\u003c/a\u003e Fix deprecations about use of SSLContext without setting a protocol.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/38904026b3329e6afb630a2d6e72221952e5678e\"\u003e\u003ccode\u003e3890402\u003c/code\u003e\u003c/a\u003e lint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/26b5b7f500b9b9f71faa63e4d829df0b3f59018c\"\u003e\u003ccode\u003e26b5b7f\u003c/code\u003e\u003c/a\u003e psutil 6 deprecated .connections, use replacement .net_connections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/cbbd53e99c9c9a2cdb40c39fc271066157956a4d\"\u003e\u003ccode\u003ecbbd53e\u003c/code\u003e\u003c/a\u003e Clean up some warnings from leakcheck.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/384070642a1704389707f0a7805809d704da7d75\"\u003e\u003ccode\u003e3840706\u003c/code\u003e\u003c/a\u003e test__util is getting extra greenlets when combined with test__threadpool on ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/408aeebcdbe47c967fb964d0bbd63dde824e2975\"\u003e\u003ccode\u003e408aeeb\u003c/code\u003e\u003c/a\u003e test__select: libuv on recent versions of Python isn't producing the OSError ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/6b6ee4e25969046d0dae28ccc0cbcf6096be3d2d\"\u003e\u003ccode\u003e6b6ee4e\u003c/code\u003e\u003c/a\u003e Update python versions tested in CI.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gevent/gevent/compare/25.9.1...26.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.3.2 to 3.4.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-greenlet/greenlet/blob/master/CHANGES.rst\"\u003egreenlet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.4.0 (2026-04-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ePublish binary wheels for RiscV 64.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix multiple rare crash paths during interpreter shutdown.\u003c/p\u003e\n\u003cp\u003eNote that this now relies on the \u003ccode\u003eatexit\u003c/code\u003e module, and introduces\nsubtle API changes during interpreter shutdown (for example,\n\u003ccode\u003egetcurrent\u003c/code\u003e is no longer available once the \u003ccode\u003eatexit\u003c/code\u003e callback fires).\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR [#499](https://github.com/python-greenlet/greenlet/issues/499) \u0026lt;https://github.com/python-greenlet/greenlet/pull/499\u0026gt;\u003c/code\u003e_ by Nicolas\nBouvrette.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAddress the results of an automated code audit performed by\nDaniel Diniz. This includes several minor correctness changes that\ntheoretically could have been crashing bugs, but typically only in\nvery rare circumstances.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR 502 \u0026lt;https://github.com/python-greenlet/greenlet/pull/502\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix several race conditions that could arise in free-threaded\nbuilds when using greenlet objects from multiple threads, some of\nwhich could lead to assertion failures or interpreter crashes.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003eissue 503 \u0026lt;https://github.com/python-greenlet/greenlet/issues/503\u0026gt;\u003c/code\u003e_, with\nthanks to Nitay Dariel and Daniel Diniz.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/df6734edbef6a0e54ecc4ba4735d93ae6d721095\"\u003e\u003ccode\u003edf6734e\u003c/code\u003e\u003c/a\u003e Preparing release 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/0f860756608b767b2ed70f935053b319d1a1b828\"\u003e\u003ccode\u003e0f86075\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/504\"\u003e#504\u003c/a\u003e from python-greenlet/freethreading-fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/459657482f3efaee294edff672bde45ac3fac208\"\u003e\u003ccode\u003e4596574\u003c/code\u003e\u003c/a\u003e TLBC: crash appears to still happen on CI 3.14t ubuntu. Re-enable workaround.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/2f4a1cf53fa282ab28ea4815164a9cb09b9320ce\"\u003e\u003ccode\u003e2f4a1cf\u003c/code\u003e\u003c/a\u003e Make green_switch (python level greenlet.switch) and green_throw check for (p...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/a0c2a2a7519985d5fe2c034a54f1a0fed82a5905\"\u003e\u003ccode\u003ea0c2a2a\u003c/code\u003e\u003c/a\u003e Fix unused variable warning when asserts are disabled.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/8688581392187d68f35180148fcd6fb4fd9a972f\"\u003e\u003ccode\u003e8688581\u003c/code\u003e\u003c/a\u003e gcc was complaining about an incomplete std::atomic type. make sure we includ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/449c76045b71f7f96c48e8d62672e5382b17cc3d\"\u003e\u003ccode\u003e449c760\u003c/code\u003e\u003c/a\u003e Make MainGreenlet._thread_state atomic; we use it for cross thread checking a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/f840e00dea524c20801bcb4f8764b968590eb6ba\"\u003e\u003ccode\u003ef840e00\u003c/code\u003e\u003c/a\u003e Add critical sections to greenlet attribute accessors.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/6b281d3eca96ec82a87067b2016241296e4c60e9\"\u003e\u003ccode\u003e6b281d3\u003c/code\u003e\u003c/a\u003e test_contextvars: No need for the fallback case where contextvars isn't avail...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/f52615ae64f73b19e53e71cd1e12cbb1841246ff\"\u003e\u003ccode\u003ef52615a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/502\"\u003e#502\u003c/a\u003e from python-greenlet/devdanzin-audit\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.3.2...3.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.3.0 to 3.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.3.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003cp\u003eThis release fixes a compatibility issue with Python 3.15:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMNT: do not use deprecated load_module method (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/pull/218\"\u003eredis/hiredis-py#218\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributors\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/tacaswell\"\u003e\u003ccode\u003e@​tacaswell\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/3cb8f069006f7138620b065fba973ccc490bde3d\"\u003e\u003ccode\u003e3cb8f06\u003c/code\u003e\u003c/a\u003e Version 3.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/2836c965d28606fecfc8989059edb36a0c4fb320\"\u003e\u003ccode\u003e2836c96\u003c/code\u003e\u003c/a\u003e MNT: do not use deprecated load_module method (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/218\"\u003e#218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.3.0...v3.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.11 to 3.13\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.rst\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e3.13 (2026-04-22)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect classification error for codepoint U+A7F1\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e3.12 (2026-04-21)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 17.0.0.\u003c/li\u003e\n\u003cli\u003eIssue a deprecation warning for the transitional argument.\u003c/li\u003e\n\u003cli\u003eAdded lazy-loading to provide some performance improvements.\u003c/li\u003e\n\u003cli\u003eRemoved vestiges of code related to Python 2 support, including\nsegmentation of data structures specific to Jython.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Rodrigo Nogueira for contributions to this release.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/89cdfd27338896cee6b1ee18e64c96ac28684ce0\"\u003e\u003ccode\u003e89cdfd2\u003c/code\u003e\u003c/a\u003e Release v3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1eb068687543118147417a8d8a70674e2c172891\"\u003e\u003ccode\u003e1eb0686\u003c/code\u003e\u003c/a\u003e Pre-release 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5f20d1e41eea3b3873d18d83d7a384784f72a92e\"\u003e\u003ccode\u003e5f20d1e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/220\"\u003e#220\u003c/a\u003e from kjd/unicode-next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/4ea84252ab21e62a79e5a3273746112b5dcfb810\"\u003e\u003ccode\u003e4ea8425\u003c/code\u003e\u003c/a\u003e Regenerate idnadata.py with correct NFKC_CF data\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/fd47341a08bbdcffda33694211ca4de10170cd41\"\u003e\u003ccode\u003efd47341\u003c/code\u003e\u003c/a\u003e Use NFKC_CF from Unicode data files instead of Python's unicodedata module\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/a5304a4cdbd7b31595f8ac42ffdfa88f5b936467\"\u003e\u003ccode\u003ea5304a4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/219\"\u003e#219\u003c/a\u003e from kjd/release-3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d80d6f9254d699961fa2c669a1534cde9d4ee5b6\"\u003e\u003ccode\u003ed80d6f9\u003c/code\u003e\u003c/a\u003e Release v3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1bb44ddb3f2a9dcf97a6ac11aba34e5b6ed31291\"\u003e\u003ccode\u003e1bb44dd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/218\"\u003e#218\u003c/a\u003e from kjd/release-candidate-3.12rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/909c49d15b8d159be163bccc7972116baffdb47b\"\u003e\u003ccode\u003e909c49d\u003c/code\u003e\u003c/a\u003e Release candidate for 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c5459a10370f005dc09921aee3201b5a45699f9d\"\u003e\u003ccode\u003ec5459a1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/217\"\u003e#217\u003c/a\u003e from kjd/housekeeping-2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.11...v3.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `importlib-metadata` from 8.7.1 to 9.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/importlib_metadata/blob/main/NEWS.rst\"\u003eimportlib-metadata's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev9.0.0\u003c/h1\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eMetadataNotFound\u003c/code\u003e (subclass of \u003ccode\u003eFileNotFoundError\u003c/code\u003e) and updated \u003ccode\u003eDistribution.metadata\u003c/code\u003e/\u003ccode\u003emetadata()\u003c/code\u003e to raise it when the metadata files are missing instead of returning \u003ccode\u003eNone\u003c/code\u003e\u003ccode\u003epython/cpython#143387\u003c/code\u003e\u003ca href=\"https://redirect.github.com/python/importlib_metadata/issues/532\"\u003e#532\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev8.9.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epython/cpython#110937\u003c/code\u003e\u003ca href=\"https://redirect.github.com/python/cpython/issues/140141\"\u003epython/cpython#140141\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/python/cpython/issues/143658\"\u003epython/cpython#143658\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev8.8.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved Python 3.9 compatibility.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/importlib_metadata/commit/a9f883fef337c667a81a987bc0cbc0dbb43b2bfe\"\u003e\u003ccode\u003ea9f883f\u003c/code\u003e\u003c/a\u003e Finalize\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/9b0dfdfe2e187dca6644007570189aadc6c97a34\"\u003e\u003ccode\u003e9b0dfdf\u003c/code\u003e\u003c/a\u003e Raise an exception when no metadata file is found (\u003ca href=\"https://redirect.github.com/python/importlib_metadata/issues/532\"\u003e#532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/0f2229ca84f20be2ceaaa4c62a276fa9b003f5bc\"\u003e\u003ccode\u003e0f2229c\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into feature/no-metadata-exception\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/2f4088e490a73ac7f39b86214d2da16d2eb1ff39\"\u003e\u003ccode\u003e2f4088e\u003c/code\u003e\u003c/a\u003e Remove news fragments about internal details.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/0ac27203f8044daf634c22f385838122a0707449\"\u003e\u003ccode\u003e0ac2720\u003c/code\u003e\u003c/a\u003e Add news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/a5c2154835facb4a9d0a6f5b3aac1f3d1ff86170\"\u003e\u003ccode\u003ea5c2154\u003c/code\u003e\u003c/a\u003e Finalize\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/e66e22634f7522e7778b66e8a8b19782a11d4943\"\u003e\u003ccode\u003ee66e226\u003c/code\u003e\u003c/a\u003e Drop support for EOL Python 3.9 (\u003ca href=\"https://redirect.github.com/python/importlib_metadata/issues/530\"\u003e#530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/6027933ae96c9e51dd0b7ce392cb30f6fcae1940\"\u003e\u003ccode\u003e6027933\u003c/code\u003e\u003c/a\u003e Add news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/b89388a53bf857127e0a6860dfcfe2cd69a79ab8\"\u003e\u003ccode\u003eb89388a\u003c/code\u003e\u003c/a\u003e Import os_helper directly.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/2dcb761d940b0115b786ab3b6f336af7d94630f4\"\u003e\u003ccode\u003e2dcb761\u003c/code\u003e\u003c/a\u003e Add uniform exclusions for test.support.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/importlib_metadata/compare/v8.7.1...v9.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 7.2.0 to 7.4.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\u003e7.4.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix AttributeError in cluster metrics recording when connection is None or ClusterNode object instance is used to extract the connection info (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3999\"\u003e#3999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing security concern in \u003cstrong\u003erepr\u003c/strong\u003e methods for ConnectionPools - passwords might leak in plain text logs (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3998\"\u003e#3998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactored connection count and SCH metric collection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4001\"\u003e#4001\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧪 Experimental Features\u003c/h2\u003e\n\u003cp\u003e-Refactored health check logic for MultiDBClient (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3994\"\u003e#3994\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExpose basic Otel classes and functions to be importable through redis.observability to match the examples in the readthedocs (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3996\"\u003e#3996\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eOpenTelemetry Native Metrics Support for asynchronous clients\u003c/strong\u003e\nAdded comprehensive OpenTelemetry metrics support for asynchronous clients following the \u003ca href=\"https://opentelemetry.io/docs/specs/semconv/database/database-metrics/\"\u003eOpenTelemetry Database Client Semantic Conventions\u003c/a\u003e.\nMetric groups include:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCommand metrics: Operation duration with retry tracking\u003c/li\u003e\n\u003cli\u003eConnection basic: Connection count and creation time\u003c/li\u003e\n\u003cli\u003eResiliency: Errors, handoffs, timeout relaxation\u003c/li\u003e\n\u003cli\u003eConnection advanced: Wait time and use time\u003c/li\u003e\n\u003cli\u003ePubsub metrics: Published and received messages\u003c/li\u003e\n\u003cli\u003eStream metrics: Processing duration and maintenance notifications\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded OTel instrumentation and metrics export for async client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3977\"\u003e#3977\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[async] Adding access to cluster client's nodes_manager and set_response_callback in ClusterPipeline objects (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3989\"\u003e#3989\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(connection): Ensure we have an initialized protocol in connection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3981\"\u003e#3981\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: use KeysT for blpop and brpop keys parameter type annotation (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3987\"\u003e#3987\u003c/a\u003e \u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3990\"\u003e#3990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 6 to 7 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3985\"\u003e#3985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: replace 3 bare except clauses with except Exception (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3980\"\u003e#3980\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/turanalmammadov\"\u003e\u003ccode\u003e@​turanalmammadov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/haosenwang1018\"\u003e\u003ccode\u003e@​haosenwang1018\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/Medno\"\u003e\u003ccode\u003e@​Medno\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.2.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/b72f24ad6a2226d46aed770e18094a86117d2217\"\u003e\u003ccode\u003eb72f24a\u003c/code\u003e\u003c/a\u003e Updating lib version to 7.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/0a4e0afe36504c3fb6df1e38683ea946febac9d3\"\u003e\u003ccode\u003e0a4e0af\u003c/code\u003e\u003c/a\u003e Refactored health check logic for MultiDBClient (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3994\"\u003e#3994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/15492c9156d3ab8dce05360977480510cf24fbf9\"\u003e\u003ccode\u003e15492c9\u003c/code\u003e\u003c/a\u003e Refactored connection count and SCH metric collection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4001\"\u003e#4001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/cd964ac96649df872a051835e9a52e05a5090607\"\u003e\u003ccode\u003ecd964ac\u003c/code\u003e\u003c/a\u003e Expose basic Otel classes and funtions to be importable through redis.observa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/46ab74d02ed9b15176f67edb817de83524f8145a\"\u003e\u003ccode\u003e46ab74d\u003c/code\u003e\u003c/a\u003e Fixing security concern in \u003cstrong\u003erepr\u003c/strong\u003e methods for ConnectionPools - passwords m...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/26482dbaae38abdb1966d9b1c803331e2dab2053\"\u003e\u003ccode\u003e26482db\u003c/code\u003e\u003c/a\u003e Fix AttributeError in cluster metrics recording when connection is None or Cl...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/8ecbc7a728792ab9c71078cb330a64c225cb3351\"\u003e\u003ccode\u003e8ecbc7a\u003c/code\u003e\u003c/a\u003e Updating lib version to 7.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/11043df86ed5f892cde1f34f08f3450f13bb6339\"\u003e\u003ccode\u003e11043df\u003c/code\u003e\u003c/a\u003e typing: accept single-key input for blpop and brpop (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3990\"\u003e#3990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d9581250202123ebf68d299e8f2ea79fa9bd7210\"\u003e\u003ccode\u003ed958125\u003c/code\u003e\u003c/a\u003e fix: use KeysT for blpop and brpop keys parameter type annotation (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3987\"\u003e#3987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/75bf91b8a28bfc3f8417e58d1b78bd112ffcf6de\"\u003e\u003ccode\u003e75bf91b\u003c/code\u003e\u003c/a\u003e [async] Adding access to cluster client's nodes_manager and set_response_call...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v7.2.0...v7.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.32.5 to 2.33.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.33.1\u003c/h2\u003e\n\u003ch2\u003e2.33.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\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/ferdnyc\"\u003e\u003ccode\u003e@​ferdnyc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7277\"\u003epsf/requests#7277\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2331-2026-03-30\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2331-2026-03-30\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.33.0\u003c/h2\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that uses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report any gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts contents to a non-deterministic location to prevent malicious file replacement. This does not affect default usage of Requests, only applications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause malformed authentication to be applied to Requests on Python 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/M0d3v1\"\u003e\u003ccode\u003e@​M0d3v1\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6865\"\u003epsf/requests#6865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aminvakil\"\u003e\u003ccode\u003e@​aminvakil\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7220\"\u003epsf/requests#7220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/E8Price\"\u003e\u003ccode\u003e@​E8Price\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6960\"\u003epsf/requests#6960\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7244\"\u003epsf/requests#7244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/magsen\"\u003e\u003ccode\u003e@​magsen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6553\"\u003epsf/requests#6553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Rohan5commit\"\u003e\u003ccode\u003e@​Rohan5commit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7227\"\u003epsf/requests#7227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.33.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that\nuses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report\nany gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts\ncontents to a non-deterministic location to prevent malicious file\nreplacement. This does not affect default usage of Requests, only\napplications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause\nmalformed authentication to be applied to Requests on\nPython 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/111d2b77790bf49943c0dfa09b365371c24aec7e\"\u003e\u003ccode\u003e111d2b7\u003c/code\u003e\u003c/a\u003e v2.33.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/f0198e6dfc431a2293dc16e1b1e8fcddc910a7f3\"\u003e\u003ccode\u003ef0198e6\u003c/code\u003e\u003c/a\u003e Fix malformed value parsing for Content-Type (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc7dd0fc4d56e808bcdd85ac2d797b3107c89259\"\u003e\u003ccode\u003ebc7dd0f\u003c/code\u003e\u003c/a\u003e Fix cosmetic header validity parsing regex (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4443b1a847b190010c2972a658924b98b5db6360\"\u003e\u003ccode\u003e4443b1a\u003c/code\u003e\u003c/a\u003e Fix unintended test extra (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7306\"\u003e#7306\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/389eea58dfb2f2ee096421a812e3af29c0298951\"\u003e\u003ccode\u003e389eea5\u003c/code\u003e\u003c/a\u003e Cleanup extracted file after extract_zipped_path test (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7407309c8a8a73aa2f4337184025d440bbedab7a\"\u003e\u003ccode\u003e7407309\u003c/code\u003e\u003c/a\u003e Packaging: DRY out extras definition (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7277\"\u003e#7277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc04dfd6dad4cb02cd92f5daa81eb562d280a761\"\u003e\u003ccode\u003ebc04dfd\u003c/code\u003e\u003c/a\u003e v2.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/66d21cb07bd6255b1280291c4fafb71803cdb3b7\"\u003e\u003ccode\u003e66d21cb\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/8b9bc8fc0f63be84602387913c4b689f19efd028\"\u003e\u003ccode\u003e8b9bc8f\u003c/code\u003e\u003c/a\u003e Move badges to top of README (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7293\"\u003e#7293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e331a288f369973f5de0ec8901c94cae4fa87286\"\u003e\u003ccode\u003ee331a28\u003c/code\u003e\u003c/a\u003e Remove unused extraction call (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7292\"\u003e#7292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.33.1\"\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.53.0 to 2.58.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.58.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(ai) Redact base64 data URLs in image_url content blocks by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5953\"\u003e#5953\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(integrations) Instrument pyreqwest tracing by \u003ca href=\"https://github.com/servusdei2018\"\u003e\u003ccode\u003e@​servusdei2018\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5682\"\u003e#5682\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(litellm) Add async callbacks by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5969\"\u003e#5969\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eAnthropic\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCapture exceptions for \u003ccode\u003estream()\u003c/code\u003e calls by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5950\"\u003e#5950\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStop setting transaction status when child span fails by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5717\"\u003e#5717\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eOnly finish relevant spans in .create() patches by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5716\"\u003e#5716\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003ePydantic Ai\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdapt import for new library versions by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5984\"\u003e#5984\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse first-class hooks when available by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5947\"\u003e#5947\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(huggingface_hub) Stop setting transaction status when a child span fails by \u003ca href=\"https://github.com/Zenithatic\"\u003e\u003ccode\u003e@​Zenithatic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5952\"\u003e#5952\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(litellm) Avoid double span exits when streaming by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5933\"\u003e#5933\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(wsgi) Respect HTTP_X_FORWARDED_PROTO in request.url construction by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5963\"\u003e#5963\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003ch4\u003eLitellm\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in rate-limit test by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5975\"\u003e#5975\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in embedding tests by \u003ca href=\"https://github.com/al...\n\n_Description has been truncated_","html_url":"https://github.com/mrs-soft/fission-environments/pull/27","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrs-soft%2Ffission-environments/issues/27","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/27/packages"},{"uuid":"4332039145","node_id":"PR_kwDORbMusc7VxcqB","number":76,"state":"open","title":"deps(backend): bump the python-minor group across 1 directory with 43 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-04-26T21:33:11.000Z","updated_at":"2026-04-26T21:34:35.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(backend): bump","group_name":"python-minor","update_count":43,"packages":[{"name":"fastapi","old_version":"0.136.0","new_version":"0.136.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"pydantic","old_version":"2.13.2","new_version":"2.13.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.13.1","new_version":"2.14.0","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"uvicorn","old_version":"0.44.0","new_version":"0.46.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"ruff","old_version":"0.15.11","new_version":"0.15.12","repository_url":"https://github.com/astral-sh/ruff"},{"name":"semgrep","old_version":"1.159.0","new_version":"1.161.0","repository_url":"https://github.com/semgrep/semgrep"},{"name":"langchain-core","old_version":"1.3.0","new_version":"1.3.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langgraph","old_version":"1.1.8","new_version":"1.1.9","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"anthropic","old_version":"0.96.0","new_version":"0.97.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"chardet","old_version":"7.4.1","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"click","old_version":"8.1.8","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"},{"name":"exceptiongroup","old_version":"1.2.2","new_version":"1.3.1","repository_url":"https://github.com/agronholm/exceptiongroup"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"jsonschema","old_version":"4.25.1","new_version":"4.26.0","repository_url":"https://github.com/python-jsonschema/jsonschema"},{"name":"langchain-classic","old_version":"1.0.3","new_version":"1.0.4","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-text-splitters","old_version":"1.1.1","new_version":"1.1.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langgraph-checkpoint","old_version":"4.0.1","new_version":"4.0.2","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langgraph-prebuilt","old_version":"1.0.9","new_version":"1.0.11","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langsmith","old_version":"0.7.30","new_version":"0.7.36","repository_url":"https://github.com/langchain-ai/langsmith-sdk"},{"name":"mako","old_version":"1.3.10","new_version":"1.3.11","repository_url":"https://github.com/sqlalchemy/mako"},{"name":"mcp","old_version":"1.23.3","new_version":"1.27.0","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"mpmath","old_version":"1.3.0","new_version":"1.4.1","repository_url":"https://github.com/mpmath/mpmath"},{"name":"opentelemetry-api","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-threading","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-sdk","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"packaging","old_version":"26.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pathspec","old_version":"1.0.4","new_version":"1.1.0","repository_url":"https://github.com/cpburnz/python-pathspec"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.46.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"ruamel-yaml-clib","old_version":"0.2.14","new_version":"0.2.15"},{"name":"sse-starlette","old_version":"3.3.4","new_version":"3.4.1","repository_url":"https://github.com/sysid/sse-starlette"},{"name":"tomli","old_version":"2.0.2","new_version":"2.4.1","repository_url":"https://github.com/hukkin/tomli"},{"name":"torch","old_version":"2.10.0","new_version":"2.11.0","repository_url":"https://github.com/pytorch/pytorch"},{"name":"tzdata","old_version":"2026.1","new_version":"2026.2","repository_url":"https://github.com/python/tzdata"},{"name":"xxhash","old_version":"3.6.0","new_version":"3.7.0","repository_url":"https://github.com/ifduyue/python-xxhash"},{"name":"zipp","old_version":"3.23.0","new_version":"3.23.1","repository_url":"https://github.com/jaraco/zipp"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor group with 43 updates in the /apps/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.0` | `0.136.1` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.2` | `2.13.3` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.13.1` | `2.14.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.44.0` | `0.46.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.11` | `0.15.12` |\n| [semgrep](https://github.com/semgrep/semgrep) | `1.159.0` | `1.161.0` |\n| [langchain-core](https://github.com/langchain-ai/langchain) | `1.3.0` | `1.3.2` |\n| [langgraph](https://github.com/langchain-ai/langgraph) | `1.1.8` | `1.1.9` |\n| [anthropic](https://github.com/anthropics/anthropic-sdk-python) | `0.96.0` | `0.97.0` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.4.22` |\n| [chardet](https://github.com/chardet/chardet) | `7.4.1` | `7.4.3` |\n| [click](https://github.com/pallets/click) | `8.1.8` | `8.3.3` |\n| [exceptiongroup](https://github.com/agronholm/exceptiongroup) | `1.2.2` | `1.3.1` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.13` |\n| [jsonschema](https://github.com/python-jsonschema/jsonschema) | `4.25.1` | `4.26.0` |\n| [langchain-classic](https://github.com/langchain-ai/langchain) | `1.0.3` | `1.0.4` |\n| [langchain-text-splitters](https://github.com/langchain-ai/langchain) | `1.1.1` | `1.1.2` |\n| [langgraph-checkpoint](https://github.com/langchain-ai/langgraph) | `4.0.1` | `4.0.2` |\n| [langgraph-prebuilt](https://github.com/langchain-ai/langgraph) | `1.0.9` | `1.0.11` |\n| [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.7.30` | `0.7.36` |\n| [mako](https://github.com/sqlalchemy/mako) | `1.3.10` | `1.3.11` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.23.3` | `1.27.0` |\n| [mpmath](https://github.com/mpmath/mpmath) | `1.3.0` | `1.4.1` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-instrumentation-threading](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.58b0` | `0.62b1` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.2` |\n| [pathspec](https://github.com/cpburnz/python-pathspec) | `1.0.4` | `1.1.0` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.46.3` |\n| ruamel-yaml-clib | `0.2.14` | `0.2.15` |\n| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.3.4` | `3.4.1` |\n| [tomli](https://github.com/hukkin/tomli) | `2.0.2` | `2.4.1` |\n| [torch](https://github.com/pytorch/pytorch) | `2.10.0` | `2.11.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.1` | `2026.2` |\n| [xxhash](https://github.com/ifduyue/python-xxhash) | `3.6.0` | `3.7.0` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.0` | `3.23.1` |\n\n\nUpdates `fastapi` from 0.136.0 to 0.136.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.136.1\u003c/h2\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Update Pydantic v2 code to address deprecations. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15101\"\u003e#15101\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔨 Tweak translation script. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15174\"\u003e#15174\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 mkdocs-material from 9.7.1 to 9.7.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15408\"\u003e#15408\u003c/a\u003e by \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 inline-snapshot from 0.31.1 to 0.32.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15409\"\u003e#15409\u003c/a\u003e by \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 pytest-codspeed from 4.3.0 to 4.4.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15407\"\u003e#15407\u003c/a\u003e by \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 pytest-cov from 7.0.0 to 7.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15406\"\u003e#15406\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.14.1 to 3.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15405\"\u003e#15405\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump mypy from 1.19.1 to 1.20.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15410\"\u003e#15410\u003c/a\u003e by \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 python-dotenv from 1.2.1 to 1.2.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15400\"\u003e#15400\u003c/a\u003e by \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 0.52.1 to 1.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15397\"\u003e#15397\u003c/a\u003e by \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 pygithub from 2.8.1 to 2.9.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15396\"\u003e#15396\u003c/a\u003e by \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.12.0 to 2.12.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15393\"\u003e#15393\u003c/a\u003e by \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 zizmor from 1.23.1 to 1.24.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15394\"\u003e#15394\u003c/a\u003e by \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 strawberry-graphql from 0.312.3 to 0.314.3. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15395\"\u003e#15395\u003c/a\u003e by \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 python-multipart from 0.0.22 to 0.0.26. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15360\"\u003e#15360\u003c/a\u003e by \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 authlib from 1.6.9 to 1.6.11. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15373\"\u003e#15373\u003c/a\u003e by \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 aiohttp from 3.13.3 to 3.13.4. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15282\"\u003e#15282\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pygments from 2.19.2 to 2.20.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15263\"\u003e#15263\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 10.20.1 to 10.21.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15391\"\u003e#15391\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 pillow from 12.1.1 to 12.2.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15333\"\u003e#15333\u003c/a\u003e by \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 pytest from 9.0.2 to 9.0.3. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15334\"\u003e#15334\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/upload-artifact from 7.0.0 to 7.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15374\"\u003e#15374\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/cache from 5.0.4 to 5.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15385\"\u003e#15385\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove Zuplo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15369\"\u003e#15369\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove Speakeasy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15368\"\u003e#15368\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Add zizmor and fix audit findings. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15316\"\u003e#15316\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\u003c/blockquote\u003e\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/e54e5a8980ffa6d7ff68ee7b25a1c46036375521\"\u003e\u003ccode\u003ee54e5a8\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9a8a5fd99902c3b80d4cc94b85e120e2b808825f\"\u003e\u003ccode\u003e9a8a5fd\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7815a32f2ed177b8b786a48b3e0712c05b5c644f\"\u003e\u003ccode\u003e7815a32\u003c/code\u003e\u003c/a\u003e ⬆️ Update Pydantic v2 code to address deprecations (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15101\"\u003e#15101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ef1c927b0558d414e199a666833942a6fabb3a51\"\u003e\u003ccode\u003eef1c927\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/38039e12a86e67f2001b9b7d96c219691d6cb4af\"\u003e\u003ccode\u003e38039e1\u003c/code\u003e\u003c/a\u003e 🔨 Tweak translation script (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15174\"\u003e#15174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4fa826ce0a3b16884a04f51e5aac95d01790b599\"\u003e\u003ccode\u003e4fa826c\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c39415673e621665fdb7bbdde69beba7eb1dfd12\"\u003e\u003ccode\u003ec394156\u003c/code\u003e\u003c/a\u003e ⬆ Bump mkdocs-material from 9.7.1 to 9.7.6 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15408\"\u003e#15408\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ae230ad2f9d90a4e3f6222ff1a5d6e8da41ec0ad\"\u003e\u003ccode\u003eae230ad\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/d9eb39d1a1bf2f6e6e5d3a55088f61c712cb864e\"\u003e\u003ccode\u003ed9eb39d\u003c/code\u003e\u003c/a\u003e ⬆ Bump inline-snapshot from 0.31.1 to 0.32.6 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15409\"\u003e#15409\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4f8b5d14d324ae8e15cfae8d85adb4186d4c2175\"\u003e\u003ccode\u003e4f8b5d1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.0...0.136.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.2 to 2.13.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/9e9a11132c980c4ec84ff6d2df06d4c1a55ca8f3\"\u003e\u003ccode\u003e9e9a111\u003c/code\u003e\u003c/a\u003e Fix backported test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1ec8c6aa0cae1c78409c6f31af738a24e16c7124\"\u003e\u003ccode\u003e1ec8c6a\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/fb4f2044436e9fa4ff9745479ce263016a99c4d6\"\u003e\u003ccode\u003efb4f204\u003c/code\u003e\u003c/a\u003e Handle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.13.1 to 2.14.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.14.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix parsing env vars into Optional Strict types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/792\"\u003epydantic/pydantic-settings#792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RecursionError with mutually recursive models in CLI by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/794\"\u003epydantic/pydantic-settings#794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix env_file from model_config ignored in CliApp.run() (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/795\"\u003e#795\u003c/a\u003e) by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/796\"\u003epydantic/pydantic-settings#796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/798\"\u003epydantic/pydantic-settings#798\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/801\"\u003epydantic/pydantic-settings#801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump samuelcolvin/check-python-version from 4.1 to 5 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 4 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/803\"\u003epydantic/pydantic-settings#803\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 4 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/804\"\u003epydantic/pydantic-settings#804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 5 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/805\"\u003epydantic/pydantic-settings#805\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python from 5 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/806\"\u003epydantic/pydantic-settings#806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore chardet and group GitHub Actions in Dependabot by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/808\"\u003epydantic/pydantic-settings#808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/download-artifact from 4 to 8 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/809\"\u003epydantic/pydantic-settings#809\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/810\"\u003epydantic/pydantic-settings#810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport reading .env files from FIFOs (e.g. 1Password Environments) by \u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AliasChoices ignored when changing provider priority by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/813\"\u003epydantic/pydantic-settings#813\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve KeyError in run_subcommand for underscore field names by \u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/814\"\u003epydantic/pydantic-settings#814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eLiteral[numeric Enum]\u003c/code\u003e coercion for CLI and env vars by \u003ca href=\"https://github.com/m9810223\"\u003e\u003ccode\u003e@​m9810223\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/811\"\u003epydantic/pydantic-settings#811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nested discriminated unions not discovered by env/CLI providers by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/816\"\u003epydantic/pydantic-settings#816\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/820\"\u003epydantic/pydantic-settings#820\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCLI ensure env nested max split internally. by \u003ca href=\"https://github.com/kschwab\"\u003e\u003ccode\u003e@​kschwab\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/821\"\u003epydantic/pydantic-settings#821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/824\"\u003epydantic/pydantic-settings#824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eboto3-stubs\u003c/code\u003e to \u003ccode\u003etypes-boto3\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/831\"\u003epydantic/pydantic-settings#831\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI not recognizing field name with validate_by_name and AliasChoices by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/826\"\u003epydantic/pydantic-settings#826\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow customisation of the dotevn setting source to filter variables by \u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/833\"\u003epydantic/pydantic-settings#833\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce yamlfmt by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/836\"\u003epydantic/pydantic-settings#836\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump boto3 from 1.42.82 to 1.42.83 in the python-packages group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/837\"\u003epydantic/pydantic-settings#837\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce zizmor by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/838\"\u003epydantic/pydantic-settings#838\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CliPositionalArg[list[CustomType]] crash for custom types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/839\"\u003epydantic/pydantic-settings#839\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/842\"\u003epydantic/pydantic-settings#842\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/844\"\u003epydantic/pydantic-settings#844\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/847\"\u003epydantic/pydantic-settings#847\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to \u003ccode\u003ejson_schema_extra\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/843\"\u003epydantic/pydantic-settings#843\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.0 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/848\"\u003epydantic/pydantic-settings#848\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\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.13.1...v2.14.0\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.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/pydantic/pydantic-settings/commit/8916beeecc6d0510e3d0532a0ed839937400ddc3\"\u003e\u003ccode\u003e8916bee\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/848\"\u003e#848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/39e551c0910c85505b608ff85a103b2c9f7396c5\"\u003e\u003ccode\u003e39e551c\u003c/code\u003e\u003c/a\u003e Fix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to `json_schema_...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9ed7f48ea2c90f436a03b01f721fe6656c869b14\"\u003e\u003ccode\u003e9ed7f48\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/847\"\u003e#847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/617c690fb16c95eb0fb98fc88c0d6d82b9af4fa9\"\u003e\u003ccode\u003e617c690\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/844\"\u003e#844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/577c05f7e8ac25904da2381db51ed4ddd4b3e4fe\"\u003e\u003ccode\u003e577c05f\u003c/code\u003e\u003c/a\u003e Add note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/842\"\u003e#842\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/2355bc54e9d442ca7916f02de28d0c936e75441c\"\u003e\u003ccode\u003e2355bc5\u003c/code\u003e\u003c/a\u003e Fix CliPositionalArg[list[CustomType]] crash for custom types (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/839\"\u003e#839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/16bd6fd230d6280d52db6ce2a0ffef8f908cc89d\"\u003e\u003ccode\u003e16bd6fd\u003c/code\u003e\u003c/a\u003e Introduce zizmor (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/838\"\u003e#838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/df8b239fe09ba712767bdf378bc90627df375f04\"\u003e\u003ccode\u003edf8b239\u003c/code\u003e\u003c/a\u003e Bump boto3 from 1.42.82 to 1.42.83 in the python-packages group (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/837\"\u003e#837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c5401a27999cd6c0e93925deb0660cd51013c8b1\"\u003e\u003ccode\u003ec5401a2\u003c/code\u003e\u003c/a\u003e Introduce yamlfmt (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/836\"\u003e#836\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/953e28e6cfe9a9e536375d771a4ffd48535a4ab2\"\u003e\u003ccode\u003e953e28e\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/833\"\u003e#833\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.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.44.0 to 0.46.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.46.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2915\"\u003eKludex/uvicorn#2915\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2916\"\u003eKludex/uvicorn#2916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2917\"\u003eKludex/uvicorn#2917\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.45.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2903\"\u003eKludex/uvicorn#2903\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2905\"\u003eKludex/uvicorn#2905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2907\"\u003eKludex/uvicorn#2907\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2906\"\u003eKludex/uvicorn#2906\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert empty context for ASGI runs by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2911\"\u003eKludex/uvicorn#2911\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2912\"\u003eKludex/uvicorn#2912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2913\"\u003eKludex/uvicorn#2913\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Krishnachaitanyakc\"\u003e\u003ccode\u003e@​Krishnachaitanyakc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2870\"\u003eKludex/uvicorn#2870\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.46.0 (April 23, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2916\"\u003e#2916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2917\"\u003e#2917\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.45.0 (April 21, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2905\"\u003e#2905\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2913\"\u003e#2913\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Explicitly start ASGI run with empty context\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2903\"\u003e#2903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2906\"\u003e#2906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b224045f5900b7f766743bcb16ba9fc3adea2606\"\u003e\u003ccode\u003eb224045\u003c/code\u003e\u003c/a\u003e Version 0.46.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2918\"\u003e#2918\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7375b5bf66d962186d663e85615d4b4d956bf880\"\u003e\u003ccode\u003e7375b5b\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/d438fb16fe2d23c7bbc2ca7094645cff1f116458\"\u003e\u003ccode\u003ed438fb1\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3e6b96446653d0156434bce529a14c80764c9eda\"\u003e\u003ccode\u003e3e6b964\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2c423bd82be169459ea254a61476de34767e0326\"\u003e\u003ccode\u003e2c423bd\u003c/code\u003e\u003c/a\u003e Version 0.45.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7f027f8e25e47668a9c2ce8b5c21b35054c48d02\"\u003e\u003ccode\u003e7f027f8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/73a80c3cc87de269ed016e584a25e585ae6f2b44\"\u003e\u003ccode\u003e73a80c3\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45c0b568d38e9bf4f2f036bc2d79eb98b0e72f72\"\u003e\u003ccode\u003e45c0b56\u003c/code\u003e\u003c/a\u003e Revert empty context for ASGI runs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/850d92656de0cb5859ee5f6ba252e19ad3d38989\"\u003e\u003ccode\u003e850d926\u003c/code\u003e\u003c/a\u003e Raise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2906\"\u003e#2906\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/fdcacb4b83bc686ea1ba9e50ffe5b8cfe49b3e00\"\u003e\u003ccode\u003efdcacb4\u003c/code\u003e\u003c/a\u003e Accept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.44.0...0.46.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.11 to 0.15.12\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.12\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-04-24.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:ignore\u003c/code\u003e logical-line suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23404\"\u003e#23404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert preview changes to displayed diagnostic severity in LSP (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24789\"\u003e#24789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003etask-branch-as-short-circuit\u003c/code\u003e (\u003ccode\u003eAIR004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23579\"\u003e#23579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix \u003ccode\u003ebreak\u003c/code\u003e/\u003ccode\u003econtinue\u003c/code\u003e handling in \u003ccode\u003eloop-iterator-mutation\u003c/code\u003e (\u003ccode\u003eB909\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24440\"\u003e#24440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLC2701\u003c/code\u003e for type parameter scopes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24576\"\u003e#24576\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epandas-vet\u003c/code\u003e] Suggest \u003ccode\u003e.array\u003c/code\u003e as well in \u003ccode\u003ePD011\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24805\"\u003e#24805\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRespect default Unix permissions for cache files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24794\"\u003e#24794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLR0124\u003c/code\u003e description not to claim self-comparison always returns the same value (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24749\"\u003e#24749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Expand docs on reusable \u003ccode\u003eTypeVar\u003c/code\u003es and scoping (\u003ccode\u003eUP046\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24153\"\u003e#24153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove rules table accessibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24711\"\u003e#24711\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylwil3\"\u003e\u003ccode\u003e@​dylwil3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/woodruffw\"\u003e\u003ccode\u003e@​woodruffw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/avasis-ai\"\u003e\u003ccode\u003e@​avasis-ai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dev-iL\"\u003e\u003ccode\u003e@​Dev-iL\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/denyszhak\"\u003e\u003ccode\u003e@​denyszhak\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/amyreese\"\u003e\u003ccode\u003e@​amyreese\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/majiayu000\"\u003e\u003ccode\u003e@​majiayu000\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.12\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.12\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-04-24.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:ignore\u003c/code\u003e logical-line suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23404\"\u003e#23404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert preview changes to displayed diagnostic severity in LSP (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24789\"\u003e#24789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003etask-branch-as-short-circuit\u003c/code\u003e (\u003ccode\u003eAIR004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23579\"\u003e#23579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix \u003ccode\u003ebreak\u003c/code\u003e/\u003ccode\u003econtinue\u003c/code\u003e handling in \u003ccode\u003eloop-iterator-mutation\u003c/code\u003e (\u003ccode\u003eB909\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24440\"\u003e#24440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLC2701\u003c/code\u003e for type parameter scopes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24576\"\u003e#24576\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epandas-vet\u003c/code\u003e] Suggest \u003ccode\u003e.array\u003c/code\u003e as well in \u003ccode\u003ePD011\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24805\"\u003e#24805\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRespect default Unix permissions for cache files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24794\"\u003e#24794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLR0124\u003c/code\u003e description not to claim self-comparison always returns the same value (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24749\"\u003e#24749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Expand docs on reusable \u003ccode\u003eTypeVar\u003c/code\u003es and scoping (\u003ccode\u003eUP046\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24153\"\u003e#24153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove rules table accessibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24711\"\u003e#24711\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylwil3\"\u003e\u003ccode\u003e@​dylwil3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/woodruffw\"\u003e\u003ccode\u003e@​woodruffw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/avasis-ai\"\u003e\u003ccode\u003e@​avasis-ai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dev-iL\"\u003e\u003ccode\u003e@​Dev-iL\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/denyszhak\"\u003e\u003ccode\u003e@​denyszhak\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/amyreese\"\u003e\u003ccode\u003e@​amyreese\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/majiayu000\"\u003e\u003ccode\u003e@​majiayu000\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/66f93cf7ed4d36325f35a452e4afa28268fbcd28\"\u003e\u003ccode\u003e66f93cf\u003c/code\u003e\u003c/a\u003e Bump 0.15.12 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24815\"\u003e#24815\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/476a4d02e8e3b6c157ac39979d8b698a1b6baa91\"\u003e\u003ccode\u003e476a4d0\u003c/code\u003e\u003c/a\u003e [ty] Complete support for more detailed diagnostics on possibly unbound error...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ed669eab30095d6c51fe6cdef6050fb01276bcb3\"\u003e\u003ccode\u003eed669ea\u003c/code\u003e\u003c/a\u003e Implement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e73d952e43feb51356ee740c5a973fce81396ff6\"\u003e\u003ccode\u003ee73d952\u003c/code\u003e\u003c/a\u003e [ty] Include inferred type in \u003ccode\u003einvalid-key\u003c/code\u003e concise diagnostic for union/inte...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/80feb29b31cd98c093316df2e0407b0c70c01b55\"\u003e\u003ccode\u003e80feb29\u003c/code\u003e\u003c/a\u003e [ty] report only dead annotation-only locals as unused (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24811\"\u003e#24811\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0fbf2bc27336a3d17d39af52cf89b78dcda8c7c8\"\u003e\u003ccode\u003e0fbf2bc\u003c/code\u003e\u003c/a\u003e Drop deprecated license classifier (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24808\"\u003e#24808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/43b174cc7f2fcb0080bb1d4843cd4bf6b72bbe27\"\u003e\u003ccode\u003e43b174c\u003c/code\u003e\u003c/a\u003e [ty] Infer lambda parameter types with \u003ccode\u003eCallable\u003c/code\u003e type context (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24317\"\u003e#24317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4f449ae4a2377569330a5ab94799d389357b5a3f\"\u003e\u003ccode\u003e4f449ae\u003c/code\u003e\u003c/a\u003e [ty] Add error context for intersection types (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24772\"\u003e#24772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/5b4e753acb46e96ad408e4904c15308e33efe307\"\u003e\u003ccode\u003e5b4e753\u003c/code\u003e\u003c/a\u003e [ty] Add support for goto in literal enum member inlay hint (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24792\"\u003e#24792\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e7cc76275a758ce1c636ea1c2d091fd576aac794\"\u003e\u003ccode\u003ee7cc762\u003c/code\u003e\u003c/a\u003e [ty] Add error context for TypedDict assignments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24790\"\u003e#24790\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.11...0.15.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `semgrep` from 1.159.0 to 1.161.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.161.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.161.0\"\u003e1.161.0\u003c/a\u003e - 2026-04-22\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala 3.4+ trait parameters are now parsed correctly. (lang-73)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSemgrep's HTTP requests no longer log URLs above the debug level; full request\ndetails remain available when running with \u003ccode\u003eSEMGREP_LOG_SRCS=cohttp.client\u003c/code\u003e. (ENGINE-2712)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.160.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.160.0\"\u003e1.160.0\u003c/a\u003e - 2026-04-16\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala: Added tree-sitter parser for improved parsing accuracy with pfff fallback. (LANG-255)\u003c/li\u003e\n\u003cli\u003epro: taint: Improved support for variadic functions (LANG-375)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed performance issues during parsing Semgrep rules containing emoji or\nother non-BMP Unicode characters. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6070\"\u003egh-6070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning when semgrep-core rule validation fails and falls back to JSON\nschema validation, alongside details of the failure. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6071\"\u003egh-6071\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/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.161.0\"\u003e1.161.0\u003c/a\u003e - 2026-04-22\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala 3.4+ trait parameters are now parsed correctly. (lang-73)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSemgrep's HTTP requests no longer log URLs above the debug level; full request\ndetails remain available when running with \u003ccode\u003eSEMGREP_LOG_SRCS=cohttp.client\u003c/code\u003e. (ENGINE-2712)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.160.0\"\u003e1.160.0\u003c/a\u003e - 2026-04-16\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala: Added tree-sitter parser for improved parsing accuracy with pfff fallback. (LANG-255)\u003c/li\u003e\n\u003cli\u003epro: taint: Improved support for variadic functions (LANG-375)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed performance issues during parsing Semgrep rules containing emoji or\nother non-BMP Unicode characters. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6070\"\u003egh-6070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning when semgrep-core rule validation fails and falls back to JSON\nschema validation, alongside details of the failure. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6071\"\u003egh-6071\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/semgrep/semgrep/commit/34b079df03bd8ed6860552adf3905cc5d146dc4d\"\u003e\u003ccode\u003e34b079d\u003c/code\u003e\u003c/a\u003e chore: release version 1.161.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/1e6302b4fde5950a805bf5c0abd7d879f11b9f6b\"\u003e\u003ccode\u003e1e6302b\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6115\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/9859b4e2e73cff0211d3b4463fe96ab334989c68\"\u003e\u003ccode\u003e9859b4e\u003c/code\u003e\u003c/a\u003e http_helpers: \u003ccode\u003escrub_uri\u003c/code\u003e for safer URI logging (semgrep/semgrep-proprietary#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/e2916c14861468bc7e2cee1f8b5276a76b91452c\"\u003e\u003ccode\u003ee2916c1\u003c/code\u003e\u003c/a\u003e scrub URLs from http_helpers logs and returned errors (semgrep/semgrep-propri...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/341da2a7ed8510686d9c43e69e6c396c54bb1dc3\"\u003e\u003ccode\u003e341da2a\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6099\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/eae9a00ede6425c3f8c9be3b2f5b78d7b92ec91b\"\u003e\u003ccode\u003eeae9a00\u003c/code\u003e\u003c/a\u003e fix: correct \u003ccode\u003eis_obrace\u003c/code\u003e to \u003ccode\u003eis_cbrace\u003c/code\u003e for closing brace count (semgrep/semg...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/d668b7179b3b3dbb210f35518595d242c667bea2\"\u003e\u003ccode\u003ed668b71\u003c/code\u003e\u003c/a\u003e chore(backend): deprecate scan endpoint v1 for semgrep ci (semgrep/semgrep-pr...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/d981dbfdf752e9cf9bc8a1a4f177b3d05a32c944\"\u003e\u003ccode\u003ed981dbf\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6098\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/2ee8536b33fad02ab3b63868014a72583ad108a6\"\u003e\u003ccode\u003e2ee8536\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6102\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/00fa4efaa465f3a58a18b511a4b12a165620069c\"\u003e\u003ccode\u003e00fa4ef\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6097\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/semgrep/semgrep/compare/v1.159.0...v1.161.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-core` from 1.3.0 to 1.3.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-core's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-core==1.3.2\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-core==1.3.1\u003c/p\u003e\n\u003cp\u003erelease(core): 1.3.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36990\"\u003e#36990\u003c/a\u003e)\nfeat(core): add content-block-centric streaming (v2) (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36834\"\u003e#36834\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-core==1.3.1\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-core==1.3.0\u003c/p\u003e\n\u003cp\u003erelease(core): 1.3.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36972\"\u003e#36972\u003c/a\u003e)\nfeat(core): allow _format_output to pass through list of ToolOutputMixin instances (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36963\"\u003e#36963\u003c/a\u003e)\nchore: bump nbconvert from 7.17.0 to 7.17.1 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36923\"\u003e#36923\u003c/a\u003e)\nfeat(core): Update inheritance behavior for tracer metadata for special keys (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36900\"\u003e#36900\u003c/a\u003e)\nchore: bump langsmith from 0.7.13 to 0.7.31 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36813\"\u003e#36813\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/fa0f0d8efa54005b9256f8d4b28d1ff770372901\"\u003e\u003ccode\u003efa0f0d8\u003c/code\u003e\u003c/a\u003e release(core): 1.3.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36990\"\u003e#36990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/9ce72eba9f6b3961d469a70b1b1980543f4cca91\"\u003e\u003ccode\u003e9ce72eb\u003c/code\u003e\u003c/a\u003e feat(core): add content-block-centric streaming (v2) (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36834\"\u003e#36834\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/889a45b664638ef646fa58257cfe263d44cb6c6a\"\u003e\u003ccode\u003e889a45b\u003c/code\u003e\u003c/a\u003e ci(infra): overlay local \u003ccode\u003elangchain-*\u003c/code\u003e installs for external partners (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36989\"\u003e#36989\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/ffaac42bf9e345ec1096d38965f36542a7b0467a\"\u003e\u003ccode\u003effaac42\u003c/code\u003e\u003c/a\u003e ci(infra): add \u003ccode\u003epytest-xdist\u003c/code\u003e to partner test groups (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36988\"\u003e#36988\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/cc2feb1aea239556fa427fd8bdabbae60f8279a6\"\u003e\u003ccode\u003ecc2feb1\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36982\"\u003e#36982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/3dd0ad958eb2d5a51a4055e104598bb26aeb3b65\"\u003e\u003ccode\u003e3dd0ad9\u003c/code\u003e\u003c/a\u003e release(fireworks): 1.2.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36978\"\u003e#36978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/7b09eb7bda4dbe99615ff5e5f74539aea682d718\"\u003e\u003ccode\u003e7b09eb7\u003c/code\u003e\u003c/a\u003e fix(fireworks): honor \u003ccode\u003emax_retries\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36973\"\u003e#36973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/d30ef8a8aa2edd47c614838c6be362456be5c2a5\"\u003e\u003ccode\u003ed30ef8a\u003c/code\u003e\u003c/a\u003e feat(fireworks): populate \u003ccode\u003eusage_metadata\u003c/code\u003e on streaming (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36977\"\u003e#36977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/2715a7499a642c99901e6cfe5e9a6ea3aecedb0f\"\u003e\u003ccode\u003e2715a74\u003c/code\u003e\u003c/a\u003e fix(fireworks): swap undeployed Kimi K2 slug in integration tests (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36975\"\u003e#36975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/2d3b49162caca316d9a24286421737471ea9e388\"\u003e\u003ccode\u003e2d3b491\u003c/code\u003e\u003c/a\u003e ci(infra): shorten working-directory dropdown labels (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36974\"\u003e#36974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain-core==1.3.0...langchain-core==1.3.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langgraph` from 1.1.8 to 1.1.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langgraph/releases\"\u003elanggraph's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elanggraph==1.1.9\u003c/h2\u003e\n\u003cp\u003eChanges since 1.1.8\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003echore(langgraph): bump version 1.1.8 -\u0026gt; 1.1.9 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7563\"\u003e#7563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): don't propagate ReplayState to subgraphs on plain resume (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7561\"\u003e#7561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(langgraph): undo unnecessary changes in stream handler (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7536\"\u003e#7536\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/a529b9bede1f1b6ecada4f0cc0e5c4b83526e563\"\u003e\u003ccode\u003ea529b9b\u003c/code\u003e\u003c/a\u003e chore(langgraph): bump version 1.1.8 -\u0026gt; 1.1.9 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7563\"\u003e#7563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/0a26b471d34da94186bee8c48d0c463b5a3bd0a0\"\u003e\u003ccode\u003e0a26b47\u003c/code\u003e\u003c/a\u003e fix(langgraph): don't propagate ReplayState to subgraphs on plain resume (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7561\"\u003e#7561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/b674dd46228b0928a6bc0ad9a3d8e38ef28f6895\"\u003e\u003ccode\u003eb674dd4\u003c/code\u003e\u003c/a\u003e feat(prebuilt): expose available tools on ToolRuntime (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7512\"\u003e#7512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/8df0a377d00839bee0b7e9645b225716db8958d1\"\u003e\u003ccode\u003e8df0a37\u003c/code\u003e\u003c/a\u003e chore(langgraph): undo unnecessary changes in stream handler (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7536\"\u003e#7536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/216cf33a54d401d80338e2a0d22827b63310a3e0\"\u003e\u003ccode\u003e216cf33\u003c/code\u003e\u003c/a\u003e chore(deps): bump the pip group across 3 directories with 1 update (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7537\"\u003e#7537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/langchain-ai/langgraph/compare/1.1.8...1.1.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anthropic` from 0.96.0 to 0.97.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/releases\"\u003eanthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.97.0\u003c/h2\u003e\n\u003ch2\u003e0.97.0 (2026-04-23)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.96.0...v0.97.0\"\u003ev0.96.0...v0.97.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e CMA Memory public beta (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/fc30ebe5ca81204faa0b1d756b61dad176e37dcb\"\u003efc30ebe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix errors in api spec (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f946de8da00748b472489e93ab4920d64d1cb22d\"\u003ef946de8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore missing features (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/72212ab8408af389981e9e6b111c00460b2b17e4\"\u003e72212ab\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e optimize file structure copying in multipart requests (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/1f9eed3a953c8cef0967df8470e04f7ac8fe3235\"\u003e1f9eed3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd missing import (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/4b12f5e0f4c29a234cd05f93c603b9cae2011aaa\"\u003e4b12f5e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e more robust bootstrap script (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/7ed737089d1f28385ee827f601ba81f1935d0b6a\"\u003e7ed7370\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.22.1 (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a4b7184e57410ae92a409db5ee6fec90edceaa51\"\u003ea4b7184\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md\"\u003eanthropic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.97.0 (2026-04-23)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.96.0...v0.97.0\"\u003ev0.96.0...v0.97.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e CMA Memory public beta (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/fc30ebe5ca81204faa0b1d756b61dad176e37dcb\"\u003efc30ebe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix errors in api spec (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f946de8da00748b472489e93ab4920d64d1cb22d\"\u003ef946de8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore missing features (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/72212ab8408af389981e9e6b111c00460b2b17e4\"\u003e72212ab\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e optimize file structure copying in multipart requests (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/1f9eed3a953c8cef0967df8470e04f7ac8fe3235\"\u003e1f9eed3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd missing import (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/4b12f5e0f4c29a234cd05f93c603b9cae2011aaa\"\u003e4b12f5e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e more robust bootstrap script (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/7ed737089d1f28385ee827f601ba81f1935d0b6a\"\u003e7ed7370\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.22.1 (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a4b7184e57410ae92a409db5ee6fec90edceaa51\"\u003ea4b7184\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/78c73600b714fcb036893768df8ee122f33d4cb3\"\u003e\u003ccode\u003e78c7360\u003c/code\u003e\u003c/a\u003e release: 0.97.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d274533036e250506f665011d8d3441ed5228944\"\u003e\u003ccode\u003ed274533\u003c/code\u003e\u003c/a\u003e chore: add missing import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/c078db11d55c5b0455272e85617d8c1cfe76180e\"\u003e\u003ccode\u003ec078db1\u003c/code\u003e\u003c/a\u003e fix(api): fix errors in api spec\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5807d0efd8fac5fb7323dbd8949a2df8528a3456\"\u003e\u003ccode\u003e5807d0e\u003c/code\u003e\u003c/a\u003e fix(api): restore missing features\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/2cb7a83a029aa3bd960536158f16231fe0ad6d0d\"\u003e\u003ccode\u003e2cb7a83\u003c/code\u003e\u003c/a\u003e feat(api): CMA Memory public beta\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/edbddf7715a78e56ab019737977e4e2db60acf1b\"\u003e\u003ccode\u003eedbddf7\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/4d3e27c78b404f7a3fcb7b1cd2221033e615574b\"\u003e\u003ccode\u003e4d3e27c\u003c/code\u003e\u003c/a\u003e chore(internal): more robust bootstrap script\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d2b3cda70e3c3b2bc153a9a486f90c3111bd4323\"\u003e\u003ccode\u003ed2b3cda\u003c/code\u003e\u003c/a\u003e chore(tests): bump steady to v0.22.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5871ccb66966dc2b6a3a33b8c8bf419512d830b8\"\u003e\u003ccode\u003e5871ccb\u003c/code\u003e\u003c/a\u003e perf(client): optimize file structure copying in multipart requests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b4fba031da1b33c80aa5104e84a7babda3b847f5\"\u003e\u003ccode\u003eb4fba03\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.96.0...v0.97.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.2.25 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/0a49067eb434e53e1f8df5f7707d5dc05ef9def4\"\u003e\u003ccode\u003e0a49067\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/403\"\u003e#403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/acf6ce8e39e3b125f4349e11904295e4fe4c1bed\"\u003e\u003ccode\u003eacf6ce8\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/feb0ed26163a9417ea0fb8eb52d47e79fcf202ab\"\u003e\u003ccode\u003efeb0ed2\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7.0.0 to 8.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/397\"\u003e#397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d9c11a50369cc377abb40f7909ded3d6da4d98a3\"\u003e\u003ccode\u003ed9c11a5\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6.0.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/396\"\u003e#396\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.04.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `chardet` from 7.4.1 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c...\n\n_Description has been truncated_","html_url":"https://github.com/AhmedAmineBejaoui/ai-code-review-platform/pull/76","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmedAmineBejaoui%2Fai-code-review-platform/issues/76","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/76/packages"},{"uuid":"4328917894","node_id":"PR_kwDOSMfTx87VoVUZ","number":6,"state":"closed","title":"chore(deps): bump chardet from 4.0.0 to 7.4.3","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-04-25T19:49:13.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-25T18:33:29.000Z","updated_at":"2026-04-25T19:49:15.000Z","time_to_close":4544,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"chardet","old_version":"4.0.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":null,"ecosystem":"pip"},"body":"Bumps [chardet](https://github.com/chardet/chardet) from 4.0.0 to 7.4.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/4.0.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chardet\u0026package-manager=pip\u0026previous-version=4.0.0\u0026new-version=7.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/wongcht/hk-bus-crawling/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/wongcht%2Fhk-bus-crawling/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"},{"uuid":"4324179046","node_id":"PR_kwDOMFeY887VZYDR","number":170,"state":"open","title":"python-deps(deps): bump the python-dependencies group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":["dependabot[bot]"],"locked":false,"comments_count":4,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-04-24T16:11:17.000Z","updated_at":"2026-04-24T16:24:22.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"python-deps(deps): bump","group_name":"python-dependencies","update_count":16,"packages":[{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"mkdocs-section-index","old_version":"0.3.11","new_version":"0.3.12","repository_url":"https://github.com/oprypin/mkdocs-section-index"},{"name":"mkdocstrings","old_version":"1.0.3","new_version":"1.0.4","repository_url":"https://github.com/mkdocstrings/mkdocstrings"},{"name":"packaging","old_version":"26.0","new_version":"26.1","repository_url":"https://github.com/pypa/packaging"},{"name":"pytest","old_version":"9.0.2","new_version":"9.0.3","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"chardet","old_version":"5.2.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"charset-normalizer","old_version":"3.4.6","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"click","old_version":"8.3.1","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pydantic](https://github.com/pydantic/pydantic), [pyright](https://github.com/RobertCraigie/pyright-python), [wheel](https://github.com/pypa/wheel), [mkdocs-section-index](https://github.com/oprypin/mkdocs-section-index), [mkdocstrings](https://github.com/mkdocstrings/mkdocstrings), [packaging](https://github.com/pypa/packaging), [pytest](https://github.com/pytest-dev/pytest), [certifi](https://github.com/certifi/python-certifi), [chardet](https://github.com/chardet/chardet), [charset-normalizer](https://github.com/jawah/charset_normalizer), [idna](https://github.com/kjd/idna), [click](https://github.com/pallets/click), [more-itertools](https://github.com/more-itertools/more-itertools), [pathspec](https://github.com/cpburnz/python-pathspec), [platformdirs](https://github.com/tox-dev/platformdirs) and [pydantic-core](https://github.com/pydantic/pydantic) to permit the latest version.\nUpdates `pydantic` from 2.12.5 to 2.13.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.0 2026-04-13\u003c/h2\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.13/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 contains the updated \u003ccode\u003epydantic.v1\u003c/code\u003e namespace, matching version 1.10.26 which includes support for Python 3.14.\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eSee the beta releases for all changes sinces 2.12.\u003c/p\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd zizmor for GitHub Actions workflow linting by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13039\"\u003e#13039\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate jiter to v0.14.0 to fix a segmentation fault on musl Linux by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13064\"\u003e#13064\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.1\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.13/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 contains the updated \u003ccode\u003epydantic.v1\u003c/code\u003e namespace, matching version 1.10.26 which includes support for Python 3.14.\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eSee the beta releases for all changes sinces 2.12.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow default factories of private attributes to take validated model data by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13013\"\u003e#13013\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\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/pydantic/pydantic/commit/9e9a11132c980c4ec84ff6d2df06d4c1a55ca8f3\"\u003e\u003ccode\u003e9e9a111\u003c/code\u003e\u003c/a\u003e Fix backported test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1ec8c6aa0cae1c78409c6f31af738a24e16c7124\"\u003e\u003ccode\u003e1ec8c6a\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/fb4f2044436e9fa4ff9745479ce263016a99c4d6\"\u003e\u003ccode\u003efb4f204\u003c/code\u003e\u003c/a\u003e Handle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/ca3ddd1149bd3b14273922a29da174804496a055\"\u003e\u003ccode\u003eca3ddd1\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/000e823a3ab7545b0c6064fde34effdcd02044ab\"\u003e\u003ccode\u003e000e823\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d45d8be3ffb6dfc6d0c64da6980140c91ff841fb\"\u003e\u003ccode\u003ed45d8be\u003c/code\u003e\u003c/a\u003e Prepare release 2.13.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/54aca609ce58e73dfe1c681d93432fbe3a4621da\"\u003e\u003ccode\u003e54aca60\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/46bf4fa648af3a1fbf4603a37f210e9d9c618357\"\u003e\u003ccode\u003e46bf4fa\u003c/code\u003e\u003c/a\u003e Fix Pydantic release workflow (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13067\"\u003e#13067\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1b359edab09c623464d23c6fd2503ae5ff276d43\"\u003e\u003ccode\u003e1b359ed\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13065\"\u003e#13065\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b1bf19445d8ac144a7a0e82674d2d87eebab6c18\"\u003e\u003ccode\u003eb1bf194\u003c/code\u003e\u003c/a\u003e Fix model equality when using runtime \u003ccode\u003eextra\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13062\"\u003e#13062\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.5...v2.13.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyright` to 1.1.409\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/RobertCraigie/pyright-python/commit/d7508e5425d3d02761d70dab1f9a2086573af429\"\u003e\u003ccode\u003ed7508e5\u003c/code\u003e\u003c/a\u003e [pyright updated to 1.1.409] Update Version (\u003ca href=\"https://redirect.github.com/RobertCraigie/pyright-python/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/RobertCraigie/pyright-python/compare/v1.1.408...v1.1.409\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `wheel` to 0.47.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/wheel/releases\"\u003ewheel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.47.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003ewheel info\u003c/code\u003e subcommand to display metadata about wheel files without unpacking them (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/639\"\u003e#639\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eWheelFile\u003c/code\u003e raising \u003ccode\u003eMissing RECORD file\u003c/code\u003e when the wheel filename contains uppercase characters (e.g. \u003ccode\u003eDjango-3.2.5.whl\u003c/code\u003e) but the \u003ccode\u003e.dist-info\u003c/code\u003e directory inside uses normalized lowercase naming (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/411\"\u003e#411\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/wheel/blob/main/docs/news.rst\"\u003ewheel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease Notes\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003e0.47.0 (2026-04-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003ewheel info\u003c/code\u003e subcommand to display metadata about wheel files without\nunpacking them (\u003ccode\u003e[#639](https://github.com/pypa/wheel/issues/639) \u0026lt;https://github.com/pypa/wheel/issues/639\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eWheelFile\u003c/code\u003e raising \u003ccode\u003eMissing RECORD file\u003c/code\u003e when the wheel filename contains\nuppercase characters (e.g. \u003ccode\u003eDjango-3.2.5.whl\u003c/code\u003e) but the \u003ccode\u003e.dist-info\u003c/code\u003e directory\ninside uses normalized lowercase naming\n(\u003ccode\u003e[#411](https://github.com/pypa/wheel/issues/411) \u0026lt;https://github.com/pypa/wheel/issues/411\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.3 (2026-01-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eImportError: cannot import name '_setuptools_logging' from 'wheel'\u003c/code\u003e when\ninstalled alongside an old version of setuptools and running the \u003ccode\u003ebdist_wheel\u003c/code\u003e\ncommand (\u003ccode\u003e[#676](https://github.com/pypa/wheel/issues/676) \u0026lt;https://github.com/pypa/wheel/issues/676\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.2 (2026-01-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRestored the \u003ccode\u003ebdist_wheel\u003c/code\u003e command for compatibility with \u003ccode\u003esetuptools\u003c/code\u003e older than\nv70.1\u003c/li\u003e\n\u003cli\u003eImporting \u003ccode\u003ewheel.bdist_wheel\u003c/code\u003e now emits a \u003ccode\u003eFutureWarning\u003c/code\u003e instead of a\n\u003ccode\u003eDeprecationWarning\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003ewheel unpack\u003c/code\u003e potentially altering the permissions of files outside of the\ndestination tree with maliciously crafted wheels (CVE-2026-24049)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.1 (2025-04-08)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTemporarily restored the \u003ccode\u003ewheel.macosx_libfile\u003c/code\u003e module\n(\u003ccode\u003e[#659](https://github.com/pypa/wheel/issues/659) \u0026lt;https://github.com/pypa/wheel/issues/659\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.0 (2025-04-03)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.8\u003c/li\u003e\n\u003cli\u003eRemoved the \u003ccode\u003ebdist_wheel\u003c/code\u003e setuptools command implementation and entry point.\nThe \u003ccode\u003ewheel.bdist_wheel\u003c/code\u003e module is now just an alias to\n\u003ccode\u003esetuptools.command.bdist_wheel\u003c/code\u003e, emitting a deprecation warning on import.\u003c/li\u003e\n\u003cli\u003eRemoved vendored \u003ccode\u003epackaging\u003c/code\u003e in favor of a run-time dependency on it\u003c/li\u003e\n\u003cli\u003eMade the \u003ccode\u003ewheel.metadata\u003c/code\u003e module private (with a deprecation warning if it's\nimported\u003c/li\u003e\n\u003cli\u003eMade the \u003ccode\u003ewheel.cli\u003c/code\u003e package private (no deprecation warning)\u003c/li\u003e\n\u003cli\u003eFixed an exception when calling the \u003ccode\u003econvert\u003c/code\u003e command with an empty description\nfield\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.45.1 (2024-11-23)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed pure Python wheels converted from eggs and wininst files having the ABI tag in\nthe file name\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/efd83a750f07a33462ea2eed365fd8dac9e51442\"\u003e\u003ccode\u003eefd83a7\u003c/code\u003e\u003c/a\u003e Created a new release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/bb69216d35588c2a0febc2d9a130727fe6e46ee3\"\u003e\u003ccode\u003ebb69216\u003c/code\u003e\u003c/a\u003e Reordered the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/d5a1763ce927618bfa7d82abe334d0d14a93cc37\"\u003e\u003ccode\u003ed5a1763\u003c/code\u003e\u003c/a\u003e fix(wheelfile): resolve .dist-info path case-insensitively when reading wheel...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/5718957928ece25eb0d1c12023c71dea4fcb5cf9\"\u003e\u003ccode\u003e5718957\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/625806845ae5756be3cc0f9d44832c29079c0954\"\u003e\u003ccode\u003e6258068\u003c/code\u003e\u003c/a\u003e chore: log_level is better than log_cli_level (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/2975debc789682b3a448b134611acc6962a93eb3\"\u003e\u003ccode\u003e2975deb\u003c/code\u003e\u003c/a\u003e Require tox \u0026gt;= 4.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/47674ba770e5ee72d679b7eb32b558e0c177640d\"\u003e\u003ccode\u003e47674ba\u003c/code\u003e\u003c/a\u003e chore: add check-sdist to checks (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/681\"\u003e#681\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/56223f6f8dfa8d3d40923f24dcf159204698d7b6\"\u003e\u003ccode\u003e56223f6\u003c/code\u003e\u003c/a\u003e \u003ccode\u003e__package__\u003c/code\u003e → \u003ccode\u003e__spec__.parent\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/679\"\u003e#679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/0ce509e02dc3cd1b7b0bdf868482de062b3c21c3\"\u003e\u003ccode\u003e0ce509e\u003c/code\u003e\u003c/a\u003e Added the wheel info subcommand (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/669\"\u003e#669\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/39039c0f3446c1ed5ec52621e98bc2bad8178a06\"\u003e\u003ccode\u003e39039c0\u003c/code\u003e\u003c/a\u003e Improved the index page\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/wheel/compare/0.46.3...0.47.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-section-index` from 0.3.11 to 0.3.12\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/releases\"\u003emkdocs-section-index's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.3.12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeclare support of \u003ca href=\"https://pypi.org/project/properdocs-theme-readthedocs/\"\u003eproperdocs-theme-readthedocs\u003c/a\u003e, such that there is no warning printed for it - \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/fefc63086bfe41d0bd91f7541721ab4f96db25dc\"\u003ehttps://github.com/oprypin/mkdocs-section-index/commit/fefc63086bfe41d0bd91f7541721ab4f96db25dc\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/compare/v0.3.11...v0.3.12\"\u003ehttps://github.com/oprypin/mkdocs-section-index/compare/v0.3.11...v0.3.12\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/oprypin/mkdocs-section-index/commit/869bbda96ac29b178cddfff57cabe8884563afde\"\u003e\u003ccode\u003e869bbda\u003c/code\u003e\u003c/a\u003e v0.3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/5ec1820d48bed54a880405edc93f1ce682e004d6\"\u003e\u003ccode\u003e5ec1820\u003c/code\u003e\u003c/a\u003e Fix a doc link so it doesn't only work on GitHub\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/2a898e8022f22bfd86ba5b8c60e0b0a0cc6089e9\"\u003e\u003ccode\u003e2a898e8\u003c/code\u003e\u003c/a\u003e Update docs dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/fefc63086bfe41d0bd91f7541721ab4f96db25dc\"\u003e\u003ccode\u003efefc630\u003c/code\u003e\u003c/a\u003e Declare support of properdocs-theme-readthedocs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/4d758be189becb315f12607146737c83ca922a3b\"\u003e\u003ccode\u003e4d758be\u003c/code\u003e\u003c/a\u003e Update deps, enable more lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/8cea221e6781c7e616cba249f46c957408a91590\"\u003e\u003ccode\u003e8cea221\u003c/code\u003e\u003c/a\u003e Drop Python 3.9, switch doc building to ProperDocs\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/compare/v0.3.11...v0.3.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocstrings` from 1.0.3 to 1.0.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases\"\u003emkdocstrings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.4\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.4\"\u003e1.0.4\u003c/a\u003e - 2026-04-15\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003eCompare with 1.0.3\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd timeout when downloading inventories (10 seconds) (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e3d1969a\u003c/a\u003e by Simon Lloyd). \u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/819\"\u003eIssue-819\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/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md\"\u003emkdocstrings's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.4\"\u003e1.0.4\u003c/a\u003e - 2026-04-15\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003eCompare with 1.0.3\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd timeout when downloading inventories (10 seconds) (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e3d1969a\u003c/a\u003e by Simon Lloyd). \u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/819\"\u003eIssue-819\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/mkdocstrings/mkdocstrings/commit/a938528b51b42cde52465d06d8b1a52484837366\"\u003e\u003ccode\u003ea938528\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/1eaa2242ec33e4b6ce666f0bbc25391f2a72c1d2\"\u003e\u003ccode\u003e1eaa224\u003c/code\u003e\u003c/a\u003e ci: Lint and type-check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/80e090d0bfbfa5688639e78559a4bb7bd3f7a55b\"\u003e\u003ccode\u003e80e090d\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/5f82a5822c50dc928ee4a133c1445543d3afa393\"\u003e\u003ccode\u003e5f82a58\u003c/code\u003e\u003c/a\u003e chore: Template upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e\u003ccode\u003e3d1969a\u003c/code\u003e\u003c/a\u003e fix: Add timeout when downloading inventories (10 seconds)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/a0c47b9992416cf02b8dfc7a76a6c5503e98cd9c\"\u003e\u003ccode\u003ea0c47b9\u003c/code\u003e\u003c/a\u003e docs: Fix broken link in README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/e500a2b416656ede76aac316304415e428dd0aa1\"\u003e\u003ccode\u003ee500a2b\u003c/code\u003e\u003c/a\u003e chore: Update sponsors section in README\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `packaging` from 26.0 to 26.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/releases\"\u003epackaging's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.1\u003c/h2\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cdel\u003ePEP 783: add handling for Emscripten wheel tags by \u003ca href=\"https://github.com/hoodmane\"\u003e\u003ccode\u003e@​hoodmane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/804\"\u003epypa/packaging#804\u003c/a\u003e\u003c/del\u003e (old name used in implementation, will be fixed in next release)\u003c/li\u003e\n\u003cli\u003ePEP 803: add handling for the \u003ccode\u003eabi3.abi3t\u003c/code\u003e free-threading tag by \u003ca href=\"https://github.com/ngoldbaum\"\u003e\u003ccode\u003e@​ngoldbaum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1099\"\u003epypa/packaging#1099\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePEP 723: add \u003ccode\u003epackaging.dependency_groups\u003c/code\u003e module, based on the \u003ccode\u003edependency-groups\u003c/code\u003e package by \u003ca href=\"https://github.com/sirosen\"\u003e\u003ccode\u003e@​sirosen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1065\"\u003epypa/packaging#1065\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.direct_url\u003c/code\u003e module by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/944\"\u003epypa/packaging#944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.errors\u003c/code\u003e module by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1071\"\u003epypa/packaging#1071\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e using ranges (new internals that will be expanded in future versions) by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1119\"\u003epypa/packaging#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecreate_compatible_tags_selector\u003c/code\u003e to select compatible tags by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1110\"\u003epypa/packaging#1110\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ekey\u003c/code\u003e argument to \u003ccode\u003eSpecifierSet.filter()\u003c/code\u003e by \u003ca href=\"https://github.com/frostming\"\u003e\u003ccode\u003e@​frostming\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1068\"\u003epypa/packaging#1068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003e\u0026amp;\u003c/code\u003e and \u003ccode\u003e|\u003c/code\u003e for \u003ccode\u003eMarker\u003c/code\u003e's by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1146\"\u003epypa/packaging#1146\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNormalize \u003ccode\u003eVersion.__replace__\u003c/code\u003e and add \u003ccode\u003eVersion.from_parts\u003c/code\u003e by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1078\"\u003epypa/packaging#1078\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd an option to validate compressed tag set sort order in \u003ccode\u003eparse_wheel_filename\u003c/code\u003e by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1150\"\u003epypa/packaging#1150\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBehavior adaptations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow exclusion of pre-releases for \u003ccode\u003e\u0026lt;V.postN\u003c/code\u003e to match spec by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1140\"\u003epypa/packaging#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNarrow exclusion of post-releases for \u003ccode\u003e\u0026gt;V\u003c/code\u003e to match spec by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1141\"\u003epypa/packaging#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003eformat_full_version\u003c/code\u003e to \u003ccode\u003e_format_full_version\u003c/code\u003e to make it visibly private by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1125\"\u003epypa/packaging#1125\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRestrict local version to ASCII by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1102\"\u003epypa/packaging#1102\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePylock (PEP 751) updates:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd pylock \u003ccode\u003eselect\u003c/code\u003e function by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1092\"\u003epypa/packaging#1092\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocument pylock \u003ccode\u003eselect()\u003c/code\u003e method and \u003ccode\u003ePylockSelectError\u003c/code\u003e by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1153\"\u003epypa/packaging#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003efilename\u003c/code\u003e property to \u003ccode\u003ePackageSdist\u003c/code\u003e and \u003ccode\u003ePackageWheel\u003c/code\u003e, more validation by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1095\"\u003epypa/packaging#1095\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGive preference to path over url by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1128\"\u003epypa/packaging#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate name/version consistency in file names by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1114\"\u003epypa/packaging#1114\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e\u0026gt;\u003c/code\u003e comparison for versions with dev+local segments by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1097\"\u003epypa/packaging#1097\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix incorrect self-comparison for \u003ccode\u003eInfinityType\u003c/code\u003e and \u003ccode\u003eNegativeInfinityType\u003c/code\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1093\"\u003epypa/packaging#1093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCanonicalize when deduplicating specifiers in \u003ccode\u003eSpecifierSet\u003c/code\u003e by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1109\"\u003epypa/packaging#1109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix charset error message formatting by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1121\"\u003epypa/packaging#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle the \u003ccode\u003ekey\u003c/code\u003e parameter in \u003ccode\u003eSpecifierSet.filter\u003c/code\u003e when specifiers are empty and prerelease is \u003ccode\u003eFalse\u003c/code\u003e by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1096\"\u003epypa/packaging#1096\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStandardize inner components of \u003ccode\u003erepr\u003c/code\u003e output by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1090\"\u003epypa/packaging#1090\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSpecifier\u003c/code\u003e's \u003ccode\u003e===\u003c/code\u003e uses original string, not normalized, when available by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1124\"\u003epypa/packaging#1124\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate int-max-str-digits \u003ccode\u003eValueError\u003c/code\u003e by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1155\"\u003epypa/packaging#1155\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePerformance:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd fast path for parsing simple versions (digits and dots only) by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1082\"\u003epypa/packaging#1082\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd fast path for \u003ccode\u003eVersion\u003c/code\u003e to \u003ccode\u003eVersion\u003c/code\u003e comparison by skipping \u003ccode\u003e_key\u003c/code\u003e property by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1083\"\u003epypa/packaging#1083\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache \u003ccode\u003eVersion\u003c/code\u003e hash value in dedicated slot by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1118\"\u003epypa/packaging#1118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eOverhaul \u003ccode\u003e_cmpkey\u003c/code\u003e to remove use of custom objects by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1116\"\u003epypa/packaging#1116\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip \u003ccode\u003e__replace__\u003c/code\u003e in Specifier comparison if not needed by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1081\"\u003epypa/packaging#1081\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSpecifierSet\u003c/code\u003e use \u003ccode\u003etuple\u003c/code\u003e instead of \u003ccode\u003efrozenset\u003c/code\u003e for \u003ccode\u003e_specs\u003c/code\u003e by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1108\"\u003epypa/packaging#1108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSpeed up complex \u003ccode\u003eSpecifierSet\u003c/code\u003e filtering by implementing cost-based ordering by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1105\"\u003epypa/packaging#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/blob/main/CHANGELOG.rst\"\u003epackaging's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e26.1 - 2026-04-14\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\nFeatures:\n\u003cul\u003e\n\u003cli\u003ePEP 783: add handling for Emscripten wheel tags in (:pull:\u003ccode\u003e804\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePEP 803: add handling for the \u003ccode\u003eabi3.abi3t\u003c/code\u003e free-threading tag in (:pull:\u003ccode\u003e1099\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePEP 723: add \u003ccode\u003epackaging.dependency_groups\u003c/code\u003e module, based on the \u003ccode\u003edependency-groups\u003c/code\u003e package in (:pull:\u003ccode\u003e1065\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.direct_url\u003c/code\u003e module in (:pull:\u003ccode\u003e944\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.errors\u003c/code\u003e module in (:pull:\u003ccode\u003e1071\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e using ranges (new internals that will be expanded in future versions) in (:pull:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecreate_compatible_tags_selector\u003c/code\u003e to select compatible tags in (:pull:\u003ccode\u003e1110\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ekey\u003c/code\u003e argument to \u003ccode\u003eSpecifierSet.filter()\u003c/code\u003e in (:pull:\u003ccode\u003e1068\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003e\u0026amp;amp;\u003c/code\u003e and \u003ccode\u003e|\u003c/code\u003e for \u003ccode\u003eMarker\u003c/code\u003e's in (:pull:\u003ccode\u003e1146\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eNormalize \u003ccode\u003eVersion.__replace__\u003c/code\u003e and add \u003ccode\u003eVersion.from_parts\u003c/code\u003e in (:pull:\u003ccode\u003e1078\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd an option to validate compressed tag set sort order in \u003ccode\u003eparse_wheel_filename\u003c/code\u003e in (:pull:\u003ccode\u003e1150\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBehavior adaptations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow exclusion of pre-releases for \u003ccode\u003e\u0026amp;lt;V.postN\u003c/code\u003e to match spec in (:pull:\u003ccode\u003e1140\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eNarrow exclusion of post-releases for \u003ccode\u003e\u0026amp;gt;V\u003c/code\u003e to match spec in (:pull:\u003ccode\u003e1141\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003eformat_full_version\u003c/code\u003e to \u003ccode\u003e_format_full_version\u003c/code\u003e to make it visibly private in (:pull:\u003ccode\u003e1125\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict local version to ASCII in (:pull:\u003ccode\u003e1102\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePylock (PEP 751) updates:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd pylock \u003ccode\u003eselect\u003c/code\u003e function in (:pull:\u003ccode\u003e1092\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDocument pylock \u003ccode\u003eselect()\u003c/code\u003e method and \u003ccode\u003ePylockSelectError\u003c/code\u003e in (:pull:\u003ccode\u003e1153\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003efilename\u003c/code\u003e property to \u003ccode\u003ePackageSdist\u003c/code\u003e and \u003ccode\u003ePackageWheel\u003c/code\u003e, more validation in (:pull:\u003ccode\u003e1095\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eGive preference to path over url in (:pull:\u003ccode\u003e1128\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eValidate name/version consistency in file names in (:pull:\u003ccode\u003e1114\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e\u0026amp;gt;\u003c/code\u003e comparison for versions with dev+local segments in (:pull:\u003ccode\u003e1097\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix incorrect self-comparison for \u003ccode\u003eInfinityType\u003c/code\u003e and \u003ccode\u003eNegativeInfinityType\u003c/code\u003e in (:pull:\u003ccode\u003e1093\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eCanonicalize when deduplicating specifiers in \u003ccode\u003eSpecifierSet\u003c/code\u003e in (:pull:\u003ccode\u003e1109\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix charset error message formatting in (:pull:\u003ccode\u003e1121\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eHandle the \u003ccode\u003ekey\u003c/code\u003e parameter in \u003ccode\u003eSpecifierSet.filter\u003c/code\u003e when specifiers are empty and prerelease is \u003ccode\u003eFalse\u003c/code\u003e in (:pull:\u003ccode\u003e1096\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eStandardize inner components of \u003ccode\u003erepr\u003c/code\u003e output in (:pull:\u003ccode\u003e1090\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSpecifier\u003c/code\u003e's \u003ccode\u003e===\u003c/code\u003e uses original string, not normalized, when available in (:pull:\u003ccode\u003e1124\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePropagate int-max-str-digits \u003ccode\u003eValueError\u003c/code\u003e in (:pull:\u003ccode\u003e1155\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePerformance:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd fast path for parsing simple versions (digits and dots only) in (:pull:\u003ccode\u003e1082\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd fast path for \u003ccode\u003eVersion\u003c/code\u003e to \u003ccode\u003eVersion\u003c/code\u003e comparison by skipping \u003ccode\u003e_key\u003c/code\u003e property in (:pull:\u003ccode\u003e1083\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eCache \u003ccode\u003eVersion\u003c/code\u003e hash value in dedicated slot in (:pull:\u003ccode\u003e1118\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eOverhaul \u003ccode\u003e_cmpkey\u003c/code\u003e to remove use of custom objects in (:pull:\u003ccode\u003e1116\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eSkip \u003ccode\u003e__replace__\u003c/code\u003e in Specifier comparison if not needed in (:pull:\u003ccode\u003e1081\u003c/code\u003e)\u003cbr /\u003e\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/c1a88a3e035e8bfe47dbc957f4a2493e8a7b4f3c\"\u003e\u003ccode\u003ec1a88a3\u003c/code\u003e\u003c/a\u003e Bump for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/702c25ecc297054f9597acda987a75dd6833acf5\"\u003e\u003ccode\u003e702c25e\u003c/code\u003e\u003c/a\u003e docs: update changelog for 26.1 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1156\"\u003e#1156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/3f4f5d46808f51709aba8341d4121f20752b3235\"\u003e\u003ccode\u003e3f4f5d4\u003c/code\u003e\u003c/a\u003e Implement \u003ccode\u003eis_unsatisfiable\u003c/code\u003e on \u003ccode\u003eSpecifierSet\u003c/code\u003e using ranges (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/06c6555f44f0f7b84459c876375c5b1d52ee7fef\"\u003e\u003ccode\u003e06c6555\u003c/code\u003e\u003c/a\u003e Propagate int-max-str-digits ValueError (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1155\"\u003e#1155\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/905c90c1eb8c77dede11899194ca4b0f5eaf188d\"\u003e\u003ccode\u003e905c90c\u003c/code\u003e\u003c/a\u003e feat: option to validate compressed tag set sort order in `parse_wheel_filena...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/af0026cff97a8f28d165d6ac4afb58b2cdc8ffc5\"\u003e\u003ccode\u003eaf0026c\u003c/code\u003e\u003c/a\u003e docs(pylock): document select() method and PylockSelectError (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1153\"\u003e#1153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/668da8662a112036e4850b68980790cb2d10dae9\"\u003e\u003ccode\u003e668da86\u003c/code\u003e\u003c/a\u003e Rename format_full_version to _format_full_version to make it visibly private...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/f294d529e2634798a98fd9cee6708307a5c1792c\"\u003e\u003ccode\u003ef294d52\u003c/code\u003e\u003c/a\u003e tests: do not reload the tags module (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1152\"\u003e#1152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/2c6c7dfa2d406e44b91f3f8d26eeed72437c9435\"\u003e\u003ccode\u003e2c6c7df\u003c/code\u003e\u003c/a\u003e feat: add handling for Emscripten wheels tags per PEP 783 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/804\"\u003e#804\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/6762eea4de40da02c119d02cc77c907c6b446b86\"\u003e\u003ccode\u003e6762eea\u003c/code\u003e\u003c/a\u003e docs(markers): document \u0026amp; and | operators for combining Marker objects (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1151\"\u003e#1151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/packaging/compare/26.0...26.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 9.0.2 to 9.0.3\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.0.3\u003c/h2\u003e\n\u003ch1\u003epytest 9.0.3 (2026-04-07)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12444\"\u003e#12444\u003c/a\u003e: Fixed \u003ccode\u003epytest.approx\u003c/code\u003e which now correctly takes into account \u003ccode\u003e~collections.abc.Mapping\u003c/code\u003e keys order to compare them.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13634\"\u003e#13634\u003c/a\u003e: Blocking a \u003ccode\u003econftest.py\u003c/code\u003e file using the \u003ccode\u003e-p no:\u003c/code\u003e option is now explicitly disallowed.\u003c/p\u003e\n\u003cp\u003ePreviously this resulted in an internal assertion failure during plugin loading.\u003c/p\u003e\n\u003cp\u003ePytest now raises a clear \u003ccode\u003eUsageError\u003c/code\u003e explaining that conftest files are not plugins and cannot be disabled via \u003ccode\u003e-p\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/13734\"\u003e#13734\u003c/a\u003e: Fixed crash when a test raises an exceptiongroup with \u003ccode\u003e__tracebackhide__ = True\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/14195\"\u003e#14195\u003c/a\u003e: Fixed an issue where non-string messages passed to \u003c!-- raw HTML omitted --\u003eunittest.TestCase.subTest()\u003c!-- raw HTML omitted --\u003e were not printed.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14343\"\u003e#14343\u003c/a\u003e: Fixed use of insecure temporary directory (CVE-2025-71176).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13388\"\u003e#13388\u003c/a\u003e: Clarified documentation for \u003ccode\u003e-p\u003c/code\u003e vs \u003ccode\u003ePYTEST_PLUGINS\u003c/code\u003e plugin loading and fixed an incorrect \u003ccode\u003e-p\u003c/code\u003e example.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13731\"\u003e#13731\u003c/a\u003e: Clarified that capture fixtures (e.g. \u003ccode\u003ecapsys\u003c/code\u003e and \u003ccode\u003ecapfd\u003c/code\u003e) take precedence over the \u003ccode\u003e-s\u003c/code\u003e / \u003ccode\u003e--capture=no\u003c/code\u003e command-line options in \u003ccode\u003eAccessing captured output from a test function \u0026lt;accessing-captured-output\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14088\"\u003e#14088\u003c/a\u003e: Clarified that the default \u003ccode\u003epytest_collection\u003c/code\u003e hook sets \u003ccode\u003esession.items\u003c/code\u003e before it calls \u003ccode\u003epytest_collection_finish\u003c/code\u003e, not after.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14255\"\u003e#14255\u003c/a\u003e: TOML integer log levels must be quoted: Updating reference documentation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12689\"\u003e#12689\u003c/a\u003e: The test reports are now published to Codecov from GitHub Actions.\nThe test statistics is visible \u003ca href=\"https://app.codecov.io/gh/pytest-dev/pytest/tests\"\u003eon the web interface\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e-- by \u003ccode\u003ealeguy02\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/a7d58d7a21b78581e636bbbdea13c66ad1657c1e\"\u003e\u003ccode\u003ea7d58d7\u003c/code\u003e\u003c/a\u003e Prepare release version 9.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/089d98199c253d8f89a040243bc4f2aa6cd5ab22\"\u003e\u003ccode\u003e089d981\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14366\"\u003e#14366\u003c/a\u003e from bluetech/revert-14193-backport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/8127eaf4ab7f6b2fdd0dc1b38343ec97aeef05ac\"\u003e\u003ccode\u003e8127eaf\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Fix: assertrepr_compare respects dict insertion order (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14050\"\u003e#14050\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14193\"\u003e#14193\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/99a7e6029e7a6e8d53e5df114b1346e035370241\"\u003e\u003ccode\u003e99a7e60\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14363\"\u003e#14363\u003c/a\u003e from pytest-dev/patchback/backports/9.0.x/95d8423bd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ddee02a578da30dd43aedc39c1c1f1aaadfcee95\"\u003e\u003ccode\u003eddee02a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14343\"\u003e#14343\u003c/a\u003e from bluetech/cve-2025-71176-simple\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/74eac6916fee34726cb194f16c516e96fbd29619\"\u003e\u003ccode\u003e74eac69\u003c/code\u003e\u003c/a\u003e doc: Update training info (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14298\"\u003e#14298\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14301\"\u003e#14301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f92dee777cfdb77d1c43633d02766ddf1f07c869\"\u003e\u003ccode\u003ef92dee7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14267\"\u003e#14267\u003c/a\u003e from pytest-dev/patchback/backports/9.0.x/d6fa26c62...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7ee58acc8777c31ac6cf388d01addf5a414a7439\"\u003e\u003ccode\u003e7ee58ac\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12378\"\u003e#12378\u003c/a\u003e from Pierre-Sassoulas/fix-implicit-str-concat-and-d...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/37da870d37e3a2f5177cae075c7b9ae279432bf8\"\u003e\u003ccode\u003e37da870\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14259\"\u003e#14259\u003c/a\u003e from mitre88/patch-4 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14268\"\u003e#14268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c34bfa3b7acb65b594707c714f1d8461b0304eed\"\u003e\u003ccode\u003ec34bfa3\u003c/code\u003e\u003c/a\u003e Add explanation for string context diffs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14257\"\u003e#14257\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14266\"\u003e#14266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.0.2...9.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.2.25 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/0a49067eb434e53e1f8df5f7707d5dc05ef9def4\"\u003e\u003ccode\u003e0a49067\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/403\"\u003e#403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/acf6ce8e39e3b125f4349e11904295e4fe4c1bed\"\u003e\u003ccode\u003eacf6ce8\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/feb0ed26163a9417ea0fb8eb52d47e79fcf202ab\"\u003e\u003ccode\u003efeb0ed2\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7.0.0 to 8.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/397\"\u003e#397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d9c11a50369cc377abb40f7909ded3d6da4d98a3\"\u003e\u003ccode\u003ed9c11a5\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6.0.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/396\"\u003e#396\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.04.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `chardet` from 5.2.0 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.6 to 3.4.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.7\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/0f07891bf516b5d5231f1bd4dd2d8da7d4d09a9a\"\u003e\u003ccode\u003e0f07891\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/729\"\u003e#729\u003c/a\u003e from jawah/release-3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fdbeb299479e8f4d737e4d227cd0b2bd5d273dc0\"\u003e\u003ccode\u003efdbeb29\u003c/code\u003e\u003c/a\u003e chore: update dev, and ci requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b66f922bfbdbdd9dd46af18a8964d4fb888756d4\"\u003e\u003ccode\u003eb66f922\u003c/code\u003e\u003c/a\u003e chore: add ft classifier\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/f94249d0a2c712f2d03124f4de6b77f5e03aaa96\"\u003e\u003ccode\u003ef94249d\u003c/code\u003e\u003c/a\u003e chore: add test cases for utf_7 recent fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/95c866f6c984bbd043e7e3ed0628aa4f3f8d5a26\"\u003e\u003ccode\u003e95c866f\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/4f429bb764c7e893f99bb4bceb60856da1baacfb\"\u003e\u003ccode\u003e4f429bb\u003c/code\u003e\u003c/a\u003e chore: bump mypy pre-commit to v1.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b579cd6cab9bd83aa3fc0ca169d4df022bf4888c\"\u003e\u003ccode\u003eb579cd6\u003c/code\u003e\u003c/a\u003e fix: correctly remove SIG remnant in utf-7 decoded string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/58bf944a77cc0883fc46a6ee8edac3549fea5d59\"\u003e\u003ccode\u003e58bf944\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump github/codeql-action from 4.32.4 to 4.35.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/44cf8a1b676a2532a8f1694e62e4f4f98f9132e1\"\u003e\u003ccode\u003e44cf8a1\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/362bc20073f737b1ba4ca2f68cffb0c4cc024d20\"\u003e\u003ccode\u003e362bc20\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump docker/setup-qemu-action from 3.7.0 to 4.0.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.6...3.4.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.11 to 3.13\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.rst\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e3.13 (2026-04-22)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect classification error for codepoint U+A7F1\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e3.12 (2026-04-21)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 17.0.0.\u003c/li\u003e\n\u003cli\u003eIssue a deprecation warning for the transitional argument.\u003c/li\u003e\n\u003cli\u003eAdded lazy-loading to provide some performance improvements.\u003c/li\u003e\n\u003cli\u003eRemoved vestiges of code related to Python 2 support, including\nsegmentation of data structures specific to Jython.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Rodrigo Nogueira for contributions to this release.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/89cdfd27338896cee6b1ee18e64c96ac28684ce0\"\u003e\u003ccode\u003e89cdfd2\u003c/code\u003e\u003c/a\u003e Release v3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1eb068687543118147417a8d8a70674e2c172891\"\u003e\u003ccode\u003e1eb0686\u003c/code\u003e\u003c/a\u003e Pre-release 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5f20d1e41eea3b3873d18d83d7a384784f72a92e\"\u003e\u003ccode\u003e5f20d1e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/220\"\u003e#220\u003c/a\u003e from kjd/unicode-next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/4ea84252ab21e62a79e5a3273746112b5dcfb810\"\u003e\u003ccode\u003e4ea8425\u003c/code\u003e\u003c/a\u003e Regenerate idnadata.py with correct NFKC_CF data\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/fd47341a08bbdcffda33694211ca4de10170cd41\"\u003e\u003ccode\u003efd47341\u003c/code\u003e\u003c/a\u003e Use NFKC_CF from Unicode data files instead of Python's unicodedata module\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/a5304a4cdbd7b31595f8ac42ffdfa88f5b936467\"\u003e\u003ccode\u003ea5304a4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/219\"\u003e#219\u003c/a\u003e from kjd/release-3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d80d6f9254d699961fa2c669a1534cde9d4ee5b6\"\u003e\u003ccode\u003ed80d6f9\u003c/code\u003e\u003c/a\u003e Release v3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1bb44ddb3f2a9dcf97a6ac11aba34e5b6ed31291\"\u003e\u003ccode\u003e1bb44dd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/218\"\u003e#218\u003c/a\u003e from kjd/release-candidate-3.12rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/909c49d15b8d159be163bccc7972116baffdb47b\"\u003e\u003ccode\u003e909c49d\u003c/code\u003e\u003c/a\u003e Release candidate for 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c5459a10370f005dc09921aee3201b5a45699f9d\"\u003e\u003ccode\u003ec5459a1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/217\"\u003e#217\u003c/a\u003e from kjd/housekeeping-2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.11...v3.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.1 to 8.3.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.3.3\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.3 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.3.3/\"\u003ehttps://pypi.org/project/click/8.3.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-3\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-3\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/1026\"\u003e#1026\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1477\"\u003e#1477\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2775\"\u003e#2775\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3298\"\u003e#3298\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3299\"\u003e#3299\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3238\"\u003e#3238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3224\"\u003e#3224\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/654\"\u003e#654\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/824\"\u003e#824\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/843\"\u003e#843\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/951\"\u003e#951\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3235\"\u003e#3235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3177\"\u003e#3177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2836\"\u003e#2836\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2837\"\u003e#2837\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3165\"\u003e#3165\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3262\"\u003e#3262\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3280\"\u003e#3280\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. \u003ca href=\"https://redirect....\n\n_Description has been truncated_","html_url":"https://github.com/tektronix/tm_data_types/pull/170","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tektronix%2Ftm_data_types/issues/170","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/170/packages"},{"uuid":"4306414716","node_id":"PR_kwDONitdnM7UfVNC","number":15,"state":"open","title":"build(deps): update chardet requirement from \u003c6.0.0,\u003e=5.0.0 to \u003e=7.4.3,\u003c8.0.0","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-04-22T02:44:40.000Z","updated_at":"2026-04-22T02:44:41.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): update","packages":[{"name":"chardet","old_version":"\u003c6.0.0,\u003e=5.0.0","new_version":"\u003e=7.4.3,\u003c8.0.0","repository_url":"https://github.com/chardet/chardet"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [chardet](https://github.com/chardet/chardet) 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/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.0.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore 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/humblebeeai/module-python-template/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/humblebeeai%2Fmodule-python-template/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"},{"uuid":"4294846669","node_id":"PR_kwDON2Hsu87T54QE","number":271,"state":"closed","title":"chore(backend)(deps): bump chardet from 5.2.0 to 7.4.3 in /backend","user":"dependabot[bot]","labels":["backend","dependencies"],"assignees":[],"locked":false,"comments_count":5,"pull_request":true,"closed_at":"2026-04-24T07:44:25.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-20T10:08:03.000Z","updated_at":"2026-04-24T07:44:34.000Z","time_to_close":336982,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(backend)(deps)","packages":[{"name":"chardet","old_version":"5.2.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps [chardet](https://github.com/chardet/chardet) from 5.2.0 to 7.4.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chardet\u0026package-manager=pip\u0026previous-version=5.2.0\u0026new-version=7.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/berntpopp/hnf1b-db/pull/271","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/berntpopp%2Fhnf1b-db/issues/271","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/271/packages"},{"uuid":"4293658924","node_id":"PR_kwDORK4Qs87T2DKP","number":26,"state":"closed","title":"Bump the pip group across 1 directory with 13 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-04-27T06:56:57.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-20T06:48:55.000Z","updated_at":"2026-04-27T06:56:59.000Z","time_to_close":605282,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip","update_count":13,"packages":[{"name":"chardet","old_version":"6.0.0.post1","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"charset-normalizer","old_version":"3.4.4","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.3.1","new_version":"8.3.2","repository_url":"https://github.com/pallets/click"},{"name":"gevent","old_version":"25.9.1","new_version":"26.4.0","repository_url":"https://github.com/gevent/gevent"},{"name":"greenlet","old_version":"3.3.2","new_version":"3.4.0","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"hiredis","old_version":"3.3.0","new_version":"3.3.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"importlib-metadata","old_version":"8.7.1","new_version":"9.0.0","repository_url":"https://github.com/python/importlib_metadata"},{"name":"redis","old_version":"7.2.0","new_version":"7.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"requests","old_version":"2.32.5","new_version":"2.33.1","repository_url":"https://github.com/psf/requests"},{"name":"sentry-sdk","old_version":"2.53.0","new_version":"2.58.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"werkzeug","old_version":"3.1.6","new_version":"3.1.8","repository_url":"https://github.com/pallets/werkzeug"},{"name":"zipp","old_version":"3.23.0","new_version":"3.23.1","repository_url":"https://github.com/jaraco/zipp"},{"name":"zope-interface","old_version":"8.2","new_version":"8.3","repository_url":"https://github.com/zopefoundation/zope.interface"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip group with 13 updates in the /python directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [chardet](https://github.com/chardet/chardet) | `6.0.0.post1` | `7.4.3` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.4` | `3.4.7` |\n| [click](https://github.com/pallets/click) | `8.3.1` | `8.3.2` |\n| [gevent](https://github.com/gevent/gevent) | `25.9.1` | `26.4.0` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.3.2` | `3.4.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.3.0` | `3.3.1` |\n| [importlib-metadata](https://github.com/python/importlib_metadata) | `8.7.1` | `9.0.0` |\n| [redis](https://github.com/redis/redis-py) | `7.2.0` | `7.4.0` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.1` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.53.0` | `2.58.0` |\n| [werkzeug](https://github.com/pallets/werkzeug) | `3.1.6` | `3.1.8` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.0` | `3.23.1` |\n| [zope-interface](https://github.com/zopefoundation/zope.interface) | `8.2` | `8.3` |\n\n\nUpdates `chardet` from 6.0.0.post1 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/6.0.0.post1...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.4 to 3.4.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.7\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\u003cbr /\u003e\nmypyc changed the usual binary output for the optimized wheel. Beware, especially if using PyInstaller or alike. See \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/714\"\u003ejawah/charset_normalizer#714\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/0f07891bf516b5d5231f1bd4dd2d8da7d4d09a9a\"\u003e\u003ccode\u003e0f07891\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/729\"\u003e#729\u003c/a\u003e from jawah/release-3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fdbeb299479e8f4d737e4d227cd0b2bd5d273dc0\"\u003e\u003ccode\u003efdbeb29\u003c/code\u003e\u003c/a\u003e chore: update dev, and ci requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b66f922bfbdbdd9dd46af18a8964d4fb888756d4\"\u003e\u003ccode\u003eb66f922\u003c/code\u003e\u003c/a\u003e chore: add ft classifier\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/f94249d0a2c712f2d03124f4de6b77f5e03aaa96\"\u003e\u003ccode\u003ef94249d\u003c/code\u003e\u003c/a\u003e chore: add test cases for utf_7 recent fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/95c866f6c984bbd043e7e3ed0628aa4f3f8d5a26\"\u003e\u003ccode\u003e95c866f\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/4f429bb764c7e893f99bb4bceb60856da1baacfb\"\u003e\u003ccode\u003e4f429bb\u003c/code\u003e\u003c/a\u003e chore: bump mypy pre-commit to v1.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b579cd6cab9bd83aa3fc0ca169d4df022bf4888c\"\u003e\u003ccode\u003eb579cd6\u003c/code\u003e\u003c/a\u003e fix: correctly remove SIG remnant in utf-7 decoded string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/58bf944a77cc0883fc46a6ee8edac3549fea5d59\"\u003e\u003ccode\u003e58bf944\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump github/codeql-action from 4.32.4 to 4.35.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/44cf8a1b676a2532a8f1694e62e4f4f98f9132e1\"\u003e\u003ccode\u003e44cf8a1\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/362bc20073f737b1ba4ca2f68cffb0c4cc024d20\"\u003e\u003ccode\u003e362bc20\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump docker/setup-qemu-action from 3.7.0 to 4.0.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.4...3.4.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.1 to 8.3.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.3.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.3.2/\"\u003ehttps://pypi.org/project/click/8.3.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/29\"\u003ehttps://github.com/pallets/click/milestone/29\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eflag_value\u003c/code\u003e when \u003ccode\u003eis_flag=False\u003c/code\u003e to allow such options to be\nused without an explicit value. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3084\"\u003e#3084\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3152\"\u003e#3152\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHide \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values as \u003ccode\u003eNone\u003c/code\u003e when using \u003ccode\u003elookup_default()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3136\"\u003e#3136\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3199\"\u003e#3199\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3202\"\u003e#3202\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3209\"\u003e#3209\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3212\"\u003e#3212\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3224\"\u003e#3224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent \u003ccode\u003e_NamedTextIOWrapper\u003c/code\u003e from closing streams owned by \u003ccode\u003eStreamMixer\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/824\"\u003e#824\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2991\"\u003e#2991\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2993\"\u003e#2993\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3110\"\u003e#3110\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3139\"\u003e#3139\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3140\"\u003e#3140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd comprehensive tests for \u003ccode\u003eCliRunner\u003c/code\u003e stream lifecycle, covering\nlogging interaction, multi-threaded safety, and sequential invocation\nisolation. Add high-iteration stress tests behind a \u003ccode\u003estress\u003c/code\u003e marker\nwith a dedicated CI job. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3139\"\u003e#3139\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix callable \u003ccode\u003eflag_value\u003c/code\u003e being instantiated when used as a default via\n\u003ccode\u003edefault=True\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3121\"\u003e#3121\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3201\"\u003e#3201\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3213\"\u003e#3213\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3225\"\u003e#3225\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.rst\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.3.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-02\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eflag_value\u003c/code\u003e when \u003ccode\u003eis_flag=False\u003c/code\u003e to allow such options to be\nused without an explicit value. :issue:\u003ccode\u003e3084\u003c/code\u003e :pr:\u003ccode\u003e3152\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eHide \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values as \u003ccode\u003eNone\u003c/code\u003e when using \u003ccode\u003elookup_default()\u003c/code\u003e.\n:issue:\u003ccode\u003e3136\u003c/code\u003e :pr:\u003ccode\u003e3199\u003c/code\u003e :pr:\u003ccode\u003e3202\u003c/code\u003e :pr:\u003ccode\u003e3209\u003c/code\u003e :pr:\u003ccode\u003e3212\u003c/code\u003e :pr:\u003ccode\u003e3224\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePrevent \u003ccode\u003e_NamedTextIOWrapper\u003c/code\u003e from closing streams owned by \u003ccode\u003eStreamMixer\u003c/code\u003e.\n:issue:\u003ccode\u003e824\u003c/code\u003e :issue:\u003ccode\u003e2991\u003c/code\u003e :issue:\u003ccode\u003e2993\u003c/code\u003e :issue:\u003ccode\u003e3110\u003c/code\u003e :pr:\u003ccode\u003e3139\u003c/code\u003e :pr:\u003ccode\u003e3140\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd comprehensive tests for \u003ccode\u003eCliRunner\u003c/code\u003e stream lifecycle, covering\nlogging interaction, multi-threaded safety, and sequential invocation\nisolation. Add high-iteration stress tests behind a \u003ccode\u003estress\u003c/code\u003e marker\nwith a dedicated CI job. :pr:\u003ccode\u003e3139\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix callable \u003ccode\u003eflag_value\u003c/code\u003e being instantiated when used as a default via\n\u003ccode\u003edefault=True\u003c/code\u003e. :issue:\u003ccode\u003e3121\u003c/code\u003e :pr:\u003ccode\u003e3201\u003c/code\u003e :pr:\u003ccode\u003e3213\u003c/code\u003e :pr:\u003ccode\u003e3225\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/052c006033729bbb422cbdad0c4fee988ecb5aa5\"\u003e\u003ccode\u003e052c006\u003c/code\u003e\u003c/a\u003e Change update release date.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/502b7ce7b131473ef00a3586e60bb000f33b4c43\"\u003e\u003ccode\u003e502b7ce\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' of \u003ca href=\"https://github.com/pallets/click\"\u003ehttps://github.com/pallets/click\u003c/a\u003e into release-8.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/a0a37e411820861d48e21b131fdd840abaf746e0\"\u003e\u003ccode\u003ea0a37e4\u003c/code\u003e\u003c/a\u003e Change publish to werkzeug latest. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3301\"\u003e#3301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/57be6fc2b40eb40279d022e6aabc983ee0dfb7a9\"\u003e\u003ccode\u003e57be6fc\u003c/code\u003e\u003c/a\u003e Change publish to werkzeug latest.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/781d6a88bdd30229e72a84cd6753b0235f339679\"\u003e\u003ccode\u003e781d6a8\u003c/code\u003e\u003c/a\u003e Update publish workflows (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3266\"\u003e#3266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/ff795b66ba945239c779b528171f5fe4536cf844\"\u003e\u003ccode\u003eff795b6\u003c/code\u003e\u003c/a\u003e Update precommit pins with tox\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/dd87ef4f9fa7d6f13e14885e9a6842a21ededebc\"\u003e\u003ccode\u003edd87ef4\u003c/code\u003e\u003c/a\u003e Update github action pins with tox\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/93d3f9d22e90035bc2b51c2183c15bd4a021376f\"\u003e\u003ccode\u003e93d3f9d\u003c/code\u003e\u003c/a\u003e Release version 8.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/3299ba1a8a5de34b24a7226a683a837d8a0857e7\"\u003e\u003ccode\u003e3299ba1\u003c/code\u003e\u003c/a\u003e Add missing PR to changelog. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3264\"\u003e#3264\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b7f62c4d002e5b5bca3ebef6b995b7338740fe6f\"\u003e\u003ccode\u003eb7f62c4\u003c/code\u003e\u003c/a\u003e Add missing PR to changelog.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.3.1...8.3.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gevent` from 25.9.1 to 26.4.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/2a096a958289611925b4b4475aaefe74815b6b0f\"\u003e\u003ccode\u003e2a096a9\u003c/code\u003e\u003c/a\u003e Preparing release 26.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/e80421d28dd4281c6ae78dd8eb2a83df85d39b0a\"\u003e\u003ccode\u003ee80421d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2171\"\u003e#2171\u003c/a\u003e from gevent/ci-py-ver-updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/6cfa49b74367e979f27db238f929508ec2a00dcf\"\u003e\u003ccode\u003e6cfa49b\u003c/code\u003e\u003c/a\u003e test__ssl.py: PROTOCOL_TLS deprecation fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/e2ec5ebbe3e10cea407bc28283cc906b809467c9\"\u003e\u003ccode\u003ee2ec5eb\u003c/code\u003e\u003c/a\u003e Fix deprecations about use of SSLContext without setting a protocol.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/38904026b3329e6afb630a2d6e72221952e5678e\"\u003e\u003ccode\u003e3890402\u003c/code\u003e\u003c/a\u003e lint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/26b5b7f500b9b9f71faa63e4d829df0b3f59018c\"\u003e\u003ccode\u003e26b5b7f\u003c/code\u003e\u003c/a\u003e psutil 6 deprecated .connections, use replacement .net_connections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/cbbd53e99c9c9a2cdb40c39fc271066157956a4d\"\u003e\u003ccode\u003ecbbd53e\u003c/code\u003e\u003c/a\u003e Clean up some warnings from leakcheck.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/384070642a1704389707f0a7805809d704da7d75\"\u003e\u003ccode\u003e3840706\u003c/code\u003e\u003c/a\u003e test__util is getting extra greenlets when combined with test__threadpool on ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/408aeebcdbe47c967fb964d0bbd63dde824e2975\"\u003e\u003ccode\u003e408aeeb\u003c/code\u003e\u003c/a\u003e test__select: libuv on recent versions of Python isn't producing the OSError ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/6b6ee4e25969046d0dae28ccc0cbcf6096be3d2d\"\u003e\u003ccode\u003e6b6ee4e\u003c/code\u003e\u003c/a\u003e Update python versions tested in CI.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gevent/gevent/compare/25.9.1...26.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.3.2 to 3.4.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-greenlet/greenlet/blob/master/CHANGES.rst\"\u003egreenlet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.4.0 (2026-04-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ePublish binary wheels for RiscV 64.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix multiple rare crash paths during interpreter shutdown.\u003c/p\u003e\n\u003cp\u003eNote that this now relies on the \u003ccode\u003eatexit\u003c/code\u003e module, and introduces\nsubtle API changes during interpreter shutdown (for example,\n\u003ccode\u003egetcurrent\u003c/code\u003e is no longer available once the \u003ccode\u003eatexit\u003c/code\u003e callback fires).\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR [#499](https://github.com/python-greenlet/greenlet/issues/499) \u0026lt;https://github.com/python-greenlet/greenlet/pull/499\u0026gt;\u003c/code\u003e_ by Nicolas\nBouvrette.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAddress the results of an automated code audit performed by\nDaniel Diniz. This includes several minor correctness changes that\ntheoretically could have been crashing bugs, but typically only in\nvery rare circumstances.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR 502 \u0026lt;https://github.com/python-greenlet/greenlet/pull/502\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix several race conditions that could arise in free-threaded\nbuilds when using greenlet objects from multiple threads, some of\nwhich could lead to assertion failures or interpreter crashes.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003eissue 503 \u0026lt;https://github.com/python-greenlet/greenlet/issues/503\u0026gt;\u003c/code\u003e_, with\nthanks to Nitay Dariel and Daniel Diniz.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/df6734edbef6a0e54ecc4ba4735d93ae6d721095\"\u003e\u003ccode\u003edf6734e\u003c/code\u003e\u003c/a\u003e Preparing release 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/0f860756608b767b2ed70f935053b319d1a1b828\"\u003e\u003ccode\u003e0f86075\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/504\"\u003e#504\u003c/a\u003e from python-greenlet/freethreading-fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/459657482f3efaee294edff672bde45ac3fac208\"\u003e\u003ccode\u003e4596574\u003c/code\u003e\u003c/a\u003e TLBC: crash appears to still happen on CI 3.14t ubuntu. Re-enable workaround.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/2f4a1cf53fa282ab28ea4815164a9cb09b9320ce\"\u003e\u003ccode\u003e2f4a1cf\u003c/code\u003e\u003c/a\u003e Make green_switch (python level greenlet.switch) and green_throw check for (p...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/a0c2a2a7519985d5fe2c034a54f1a0fed82a5905\"\u003e\u003ccode\u003ea0c2a2a\u003c/code\u003e\u003c/a\u003e Fix unused variable warning when asserts are disabled.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/8688581392187d68f35180148fcd6fb4fd9a972f\"\u003e\u003ccode\u003e8688581\u003c/code\u003e\u003c/a\u003e gcc was complaining about an incomplete std::atomic type. make sure we includ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/449c76045b71f7f96c48e8d62672e5382b17cc3d\"\u003e\u003ccode\u003e449c760\u003c/code\u003e\u003c/a\u003e Make MainGreenlet._thread_state atomic; we use it for cross thread checking a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/f840e00dea524c20801bcb4f8764b968590eb6ba\"\u003e\u003ccode\u003ef840e00\u003c/code\u003e\u003c/a\u003e Add critical sections to greenlet attribute accessors.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/6b281d3eca96ec82a87067b2016241296e4c60e9\"\u003e\u003ccode\u003e6b281d3\u003c/code\u003e\u003c/a\u003e test_contextvars: No need for the fallback case where contextvars isn't avail...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/f52615ae64f73b19e53e71cd1e12cbb1841246ff\"\u003e\u003ccode\u003ef52615a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/502\"\u003e#502\u003c/a\u003e from python-greenlet/devdanzin-audit\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.3.2...3.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.3.0 to 3.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.3.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003cp\u003eThis release fixes a compatibility issue with Python 3.15:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMNT: do not use deprecated load_module method (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/pull/218\"\u003eredis/hiredis-py#218\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributors\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/tacaswell\"\u003e\u003ccode\u003e@​tacaswell\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/3cb8f069006f7138620b065fba973ccc490bde3d\"\u003e\u003ccode\u003e3cb8f06\u003c/code\u003e\u003c/a\u003e Version 3.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/2836c965d28606fecfc8989059edb36a0c4fb320\"\u003e\u003ccode\u003e2836c96\u003c/code\u003e\u003c/a\u003e MNT: do not use deprecated load_module method (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/218\"\u003e#218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.3.0...v3.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `importlib-metadata` from 8.7.1 to 9.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/importlib_metadata/blob/main/NEWS.rst\"\u003eimportlib-metadata's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev9.0.0\u003c/h1\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eMetadataNotFound\u003c/code\u003e (subclass of \u003ccode\u003eFileNotFoundError\u003c/code\u003e) and updated \u003ccode\u003eDistribution.metadata\u003c/code\u003e/\u003ccode\u003emetadata()\u003c/code\u003e to raise it when the metadata files are missing instead of returning \u003ccode\u003eNone\u003c/code\u003e\u003ccode\u003epython/cpython#143387\u003c/code\u003e\u003ca href=\"https://redirect.github.com/python/importlib_metadata/issues/532\"\u003e#532\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev8.9.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epython/cpython#110937\u003c/code\u003e\u003ca href=\"https://redirect.github.com/python/cpython/issues/140141\"\u003epython/cpython#140141\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/python/cpython/issues/143658\"\u003epython/cpython#143658\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev8.8.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved Python 3.9 compatibility.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/importlib_metadata/commit/a9f883fef337c667a81a987bc0cbc0dbb43b2bfe\"\u003e\u003ccode\u003ea9f883f\u003c/code\u003e\u003c/a\u003e Finalize\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/9b0dfdfe2e187dca6644007570189aadc6c97a34\"\u003e\u003ccode\u003e9b0dfdf\u003c/code\u003e\u003c/a\u003e Raise an exception when no metadata file is found (\u003ca href=\"https://redirect.github.com/python/importlib_metadata/issues/532\"\u003e#532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/0f2229ca84f20be2ceaaa4c62a276fa9b003f5bc\"\u003e\u003ccode\u003e0f2229c\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into feature/no-metadata-exception\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/2f4088e490a73ac7f39b86214d2da16d2eb1ff39\"\u003e\u003ccode\u003e2f4088e\u003c/code\u003e\u003c/a\u003e Remove news fragments about internal details.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/0ac27203f8044daf634c22f385838122a0707449\"\u003e\u003ccode\u003e0ac2720\u003c/code\u003e\u003c/a\u003e Add news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/a5c2154835facb4a9d0a6f5b3aac1f3d1ff86170\"\u003e\u003ccode\u003ea5c2154\u003c/code\u003e\u003c/a\u003e Finalize\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/e66e22634f7522e7778b66e8a8b19782a11d4943\"\u003e\u003ccode\u003ee66e226\u003c/code\u003e\u003c/a\u003e Drop support for EOL Python 3.9 (\u003ca href=\"https://redirect.github.com/python/importlib_metadata/issues/530\"\u003e#530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/6027933ae96c9e51dd0b7ce392cb30f6fcae1940\"\u003e\u003ccode\u003e6027933\u003c/code\u003e\u003c/a\u003e Add news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/b89388a53bf857127e0a6860dfcfe2cd69a79ab8\"\u003e\u003ccode\u003eb89388a\u003c/code\u003e\u003c/a\u003e Import os_helper directly.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/2dcb761d940b0115b786ab3b6f336af7d94630f4\"\u003e\u003ccode\u003e2dcb761\u003c/code\u003e\u003c/a\u003e Add uniform exclusions for test.support.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/importlib_metadata/compare/v8.7.1...v9.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 7.2.0 to 7.4.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\u003e7.4.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix AttributeError in cluster metrics recording when connection is None or ClusterNode object instance is used to extract the connection info (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3999\"\u003e#3999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing security concern in \u003cstrong\u003erepr\u003c/strong\u003e methods for ConnectionPools - passwords might leak in plain text logs (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3998\"\u003e#3998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactored connection count and SCH metric collection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4001\"\u003e#4001\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧪 Experimental Features\u003c/h2\u003e\n\u003cp\u003e-Refactored health check logic for MultiDBClient (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3994\"\u003e#3994\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExpose basic Otel classes and functions to be importable through redis.observability to match the examples in the readthedocs (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3996\"\u003e#3996\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eOpenTelemetry Native Metrics Support for asynchronous clients\u003c/strong\u003e\nAdded comprehensive OpenTelemetry metrics support for asynchronous clients following the \u003ca href=\"https://opentelemetry.io/docs/specs/semconv/database/database-metrics/\"\u003eOpenTelemetry Database Client Semantic Conventions\u003c/a\u003e.\nMetric groups include:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCommand metrics: Operation duration with retry tracking\u003c/li\u003e\n\u003cli\u003eConnection basic: Connection count and creation time\u003c/li\u003e\n\u003cli\u003eResiliency: Errors, handoffs, timeout relaxation\u003c/li\u003e\n\u003cli\u003eConnection advanced: Wait time and use time\u003c/li\u003e\n\u003cli\u003ePubsub metrics: Published and received messages\u003c/li\u003e\n\u003cli\u003eStream metrics: Processing duration and maintenance notifications\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded OTel instrumentation and metrics export for async client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3977\"\u003e#3977\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[async] Adding access to cluster client's nodes_manager and set_response_callback in ClusterPipeline objects (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3989\"\u003e#3989\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(connection): Ensure we have an initialized protocol in connection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3981\"\u003e#3981\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: use KeysT for blpop and brpop keys parameter type annotation (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3987\"\u003e#3987\u003c/a\u003e \u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3990\"\u003e#3990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 6 to 7 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3985\"\u003e#3985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: replace 3 bare except clauses with except Exception (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3980\"\u003e#3980\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/turanalmammadov\"\u003e\u003ccode\u003e@​turanalmammadov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/haosenwang1018\"\u003e\u003ccode\u003e@​haosenwang1018\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/Medno\"\u003e\u003ccode\u003e@​Medno\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.2.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/b72f24ad6a2226d46aed770e18094a86117d2217\"\u003e\u003ccode\u003eb72f24a\u003c/code\u003e\u003c/a\u003e Updating lib version to 7.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/0a4e0afe36504c3fb6df1e38683ea946febac9d3\"\u003e\u003ccode\u003e0a4e0af\u003c/code\u003e\u003c/a\u003e Refactored health check logic for MultiDBClient (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3994\"\u003e#3994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/15492c9156d3ab8dce05360977480510cf24fbf9\"\u003e\u003ccode\u003e15492c9\u003c/code\u003e\u003c/a\u003e Refactored connection count and SCH metric collection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4001\"\u003e#4001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/cd964ac96649df872a051835e9a52e05a5090607\"\u003e\u003ccode\u003ecd964ac\u003c/code\u003e\u003c/a\u003e Expose basic Otel classes and funtions to be importable through redis.observa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/46ab74d02ed9b15176f67edb817de83524f8145a\"\u003e\u003ccode\u003e46ab74d\u003c/code\u003e\u003c/a\u003e Fixing security concern in \u003cstrong\u003erepr\u003c/strong\u003e methods for ConnectionPools - passwords m...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/26482dbaae38abdb1966d9b1c803331e2dab2053\"\u003e\u003ccode\u003e26482db\u003c/code\u003e\u003c/a\u003e Fix AttributeError in cluster metrics recording when connection is None or Cl...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/8ecbc7a728792ab9c71078cb330a64c225cb3351\"\u003e\u003ccode\u003e8ecbc7a\u003c/code\u003e\u003c/a\u003e Updating lib version to 7.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/11043df86ed5f892cde1f34f08f3450f13bb6339\"\u003e\u003ccode\u003e11043df\u003c/code\u003e\u003c/a\u003e typing: accept single-key input for blpop and brpop (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3990\"\u003e#3990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d9581250202123ebf68d299e8f2ea79fa9bd7210\"\u003e\u003ccode\u003ed958125\u003c/code\u003e\u003c/a\u003e fix: use KeysT for blpop and brpop keys parameter type annotation (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3987\"\u003e#3987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/75bf91b8a28bfc3f8417e58d1b78bd112ffcf6de\"\u003e\u003ccode\u003e75bf91b\u003c/code\u003e\u003c/a\u003e [async] Adding access to cluster client's nodes_manager and set_response_call...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v7.2.0...v7.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.32.5 to 2.33.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.33.1\u003c/h2\u003e\n\u003ch2\u003e2.33.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\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/ferdnyc\"\u003e\u003ccode\u003e@​ferdnyc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7277\"\u003epsf/requests#7277\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2331-2026-03-30\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2331-2026-03-30\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.33.0\u003c/h2\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that uses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report any gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts contents to a non-deterministic location to prevent malicious file replacement. This does not affect default usage of Requests, only applications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause malformed authentication to be applied to Requests on Python 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/M0d3v1\"\u003e\u003ccode\u003e@​M0d3v1\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6865\"\u003epsf/requests#6865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aminvakil\"\u003e\u003ccode\u003e@​aminvakil\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7220\"\u003epsf/requests#7220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/E8Price\"\u003e\u003ccode\u003e@​E8Price\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6960\"\u003epsf/requests#6960\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7244\"\u003epsf/requests#7244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/magsen\"\u003e\u003ccode\u003e@​magsen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6553\"\u003epsf/requests#6553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Rohan5commit\"\u003e\u003ccode\u003e@​Rohan5commit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7227\"\u003epsf/requests#7227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.33.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that\nuses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report\nany gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts\ncontents to a non-deterministic location to prevent malicious file\nreplacement. This does not affect default usage of Requests, only\napplications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause\nmalformed authentication to be applied to Requests on\nPython 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/111d2b77790bf49943c0dfa09b365371c24aec7e\"\u003e\u003ccode\u003e111d2b7\u003c/code\u003e\u003c/a\u003e v2.33.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/f0198e6dfc431a2293dc16e1b1e8fcddc910a7f3\"\u003e\u003ccode\u003ef0198e6\u003c/code\u003e\u003c/a\u003e Fix malformed value parsing for Content-Type (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc7dd0fc4d56e808bcdd85ac2d797b3107c89259\"\u003e\u003ccode\u003ebc7dd0f\u003c/code\u003e\u003c/a\u003e Fix cosmetic header validity parsing regex (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4443b1a847b190010c2972a658924b98b5db6360\"\u003e\u003ccode\u003e4443b1a\u003c/code\u003e\u003c/a\u003e Fix unintended test extra (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7306\"\u003e#7306\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/389eea58dfb2f2ee096421a812e3af29c0298951\"\u003e\u003ccode\u003e389eea5\u003c/code\u003e\u003c/a\u003e Cleanup extracted file after extract_zipped_path test (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7407309c8a8a73aa2f4337184025d440bbedab7a\"\u003e\u003ccode\u003e7407309\u003c/code\u003e\u003c/a\u003e Packaging: DRY out extras definition (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7277\"\u003e#7277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc04dfd6dad4cb02cd92f5daa81eb562d280a761\"\u003e\u003ccode\u003ebc04dfd\u003c/code\u003e\u003c/a\u003e v2.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/66d21cb07bd6255b1280291c4fafb71803cdb3b7\"\u003e\u003ccode\u003e66d21cb\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/8b9bc8fc0f63be84602387913c4b689f19efd028\"\u003e\u003ccode\u003e8b9bc8f\u003c/code\u003e\u003c/a\u003e Move badges to top of README (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7293\"\u003e#7293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e331a288f369973f5de0ec8901c94cae4fa87286\"\u003e\u003ccode\u003ee331a28\u003c/code\u003e\u003c/a\u003e Remove unused extraction call (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7292\"\u003e#7292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.33.1\"\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.53.0 to 2.58.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.58.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(ai) Redact base64 data URLs in image_url content blocks by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5953\"\u003e#5953\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(integrations) Instrument pyreqwest tracing by \u003ca href=\"https://github.com/servusdei2018\"\u003e\u003ccode\u003e@​servusdei2018\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5682\"\u003e#5682\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(litellm) Add async callbacks by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5969\"\u003e#5969\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eAnthropic\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCapture exceptions for \u003ccode\u003estream()\u003c/code\u003e calls by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5950\"\u003e#5950\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStop setting transaction status when child span fails by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5717\"\u003e#5717\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eOnly finish relevant spans in .create() patches by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5716\"\u003e#5716\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003ePydantic Ai\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdapt import for new library versions by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5984\"\u003e#5984\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse first-class hooks when available by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5947\"\u003e#5947\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(huggingface_hub) Stop setting transaction status when a child span fails by \u003ca href=\"https://github.com/Zenithatic\"\u003e\u003ccode\u003e@​Zenithatic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5952\"\u003e#5952\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(litellm) Avoid double span exits when streaming by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5933\"\u003e#5933\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(wsgi) Respect HTTP_X_FORWARDED_PROTO in request.url construction by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5963\"\u003e#5963\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003ch4\u003eLitellm\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in rate-limit test by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5975\"\u003e#5975\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in embedding tests by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5970\"\u003e#5970\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in nonstreaming \u003ccode\u003ecompletion()\u003c/code\u003e tests by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5937\"\u003e#5937\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove dead attributes by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5985\"\u003e#5985\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(ai) Remove \u003ccode\u003egen_ai.tool.type\u003c/code\u003e span attribute by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5964\"\u003e#5964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(anthropic) Separate sync and async .create() patches by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5715\"\u003e#5715\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai) Split token counting by API for easier deprecation by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5930\"\u003e#5930\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai-agents) Remove error attributes by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5986\"\u003e#5986\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(opentelemetry) Ignore mypy error by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5927\"\u003e#5927\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🤖 Update test matrix with new releases (04/13) by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5983\"\u003e#5983\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix license metadata in setup.py by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5934\"\u003e#5934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate validate-pr workflow by \u003ca href=\"https://github.com/stephanie-anderson\"\u003e\u003ccode\u003e@​stephanie-anderson\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5931\"\u003e#5931\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eNone\u003c/code\u003e span context in the span processor and pin tokenizers version for anthropic tests on Python 3.8 by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5967\"\u003e#5967\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- 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.58.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(ai) Redact base64 data URLs in image_url content blocks by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5953\"\u003e#5953\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(integrations) Instrument pyreqwest tracing by \u003ca href=\"https://github.com/servusdei2018\"\u003e\u003ccode\u003e@​servusdei2018\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5682\"\u003e#5682\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(litellm) Add async callbacks by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5969\"\u003e#5969\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eAnthropic\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCapture exceptions for \u003ccode\u003estream()\u003c/code\u003e calls by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5950\"\u003e#5950\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStop setting transaction status when child span fails by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5717\"\u003e#5717\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eOnly finish relevant spans in .create() patches by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5716\"\u003e#5716\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003ePydantic Ai\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdapt import for new library versions by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5984\"\u003e#5984\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse first-class hooks when available by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5947\"\u003e#5947\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(huggingface_hub) Stop setting transaction status when a child span fails by \u003ca href=\"https://github.com/Zenithatic\"\u003e\u003ccode\u003e@​Zenithatic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5952\"\u003e#5952\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(litellm) Avoid double span exits when streaming by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5933\"\u003e#5933\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(wsgi) Respect HTTP_X_FORWARDED_PROTO in request.url construction by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5963\"\u003e#5963\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003ch4\u003eLitellm\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in rate-limit test by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5975\"\u003e#5975\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in embedding tests by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5970\"\u003e#5970\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in nonstreaming \u003ccode\u003ecompletion()\u003c/code\u003e tests by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5937\"\u003e#5937\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove dead attributes by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5985\"\u003e#5985\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(ai) Remove \u003ccode\u003egen_ai.tool.type\u003c/code\u003e span attribute by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5964\"\u003e#5964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(anthropic) Separate sync and async .create() patches by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5715\"\u003e#5715\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai) Split token counting by API for easier deprecation by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5930\"\u003e#5930\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai-agents) Remove error attributes by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5986\"\u003e#5986\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(opentelemetry) Ignore mypy error by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5927\"\u003e#5927\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🤖 Update test matrix with new releases (04/13) by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5983\"\u003e#5983\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix license metadata in setup.py by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5934\"\u003e#5934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate validate-pr workflow by \u003ca href=\"https://github.com/stephanie-anderson\"\u003e\u003ccode\u003e@​stephanie-anderson\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5931\"\u003e#5931\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eNone\u003c/code\u003e span context in the span processor and pin tokenizers version for anthropic tests on Python 3.8 by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5967\"\u003e#5967\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/ce445d96977ec083b97495c917aa0c3ce453689d\"\u003e\u003ccode\u003ece445d9\u003c/code\u003e\u003c/a\u003e release: 2.58.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/c0c0e9cfc8536f0d9ba22925e4bea17034138cd0\"\u003e\u003ccode\u003ec0c0e9c\u003c/code\u003e\u003c/a\u003e feat(litellm): Add async callbacks (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/5969\"\u003e#5969\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/ea74b63881d2cf1d71130a8b6ef4dfff4e4cd337\"\u003e\u003ccode\u003eea74b63\u003c/code\u003e\u003c/a\u003e test(litellm): Replace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in rate-limit test (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/5975\"\u003e#5975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/06ed1bca2f9302055ba43dc058f5afcc731b8d79\"\u003e\u003ccode\u003e06ed1bc\u003c/code\u003e\u003c/a\u003e test(litellm): Replace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in embedding tests (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/5970\"\u003e#5970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/66ef2e6976a1ae86e97aca08cbc806f9e579f324\"\u003e\u003ccode\u003e66ef2e6\u003c/code\u003e\u003c/a\u003e test(litellm): Replace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in nonstreaming `completion()...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/96ebbf67d91146ebb30be6e0898a637ea6c2c697\"\u003e\u003ccode\u003e96ebbf6\u003c/code\u003e\u003c/a\u003e fix(litellm): Avoid double span exits when streaming (\u003ca...\n\n_Description has been truncated_","html_url":"https://github.com/mrs-soft/fission-environments/pull/26","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrs-soft%2Ffission-environments/issues/26","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/26/packages"},{"uuid":"4293163826","node_id":"PR_kwDOAJbZm87T0bQs","number":5407,"state":"open","title":"chore(deps): bump chardet from 7.4.2 to 7.4.3","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-04-20T04:53:34.000Z","updated_at":"2026-04-20T05:17:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"chardet","old_version":"7.4.2","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":null,"ecosystem":"pip"},"body":"Bumps [chardet](https://github.com/chardet/chardet) from 7.4.2 to 7.4.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chardet\u0026package-manager=pip\u0026previous-version=7.4.2\u0026new-version=7.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/GeotrekCE/Geotrek-admin/pull/5407","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeotrekCE%2FGeotrek-admin/issues/5407","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5407/packages"},{"uuid":"4293023396","node_id":"PR_kwDOHnVgLs7Tz_kq","number":365,"state":"closed","title":"Bump chardet from 3.0.4 to 7.4.3","user":"dependabot[bot]","labels":["Stale"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-05-27T02:37:10.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-20T04:07:01.000Z","updated_at":"2026-05-27T02:37:19.000Z","time_to_close":3191409,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"chardet","old_version":"3.0.4","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":null,"ecosystem":"pip"},"body":"Bumps [chardet](https://github.com/chardet/chardet) from 3.0.4 to 7.4.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/3.0.4...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chardet\u0026package-manager=pip\u0026previous-version=3.0.4\u0026new-version=7.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/meanseo/pytorch/pull/365","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/meanseo%2Fpytorch/issues/365","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/365/packages"},{"uuid":"4292748320","node_id":"PR_kwDOGkj6vc7TzIGf","number":417,"state":"closed","title":"Bump chardet from 3.0.4 to 7.4.3","user":"dependabot[bot]","labels":["dependencies","python","status: stale"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-05-25T05:53:41.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-20T02:31:37.000Z","updated_at":"2026-05-25T05:53:51.000Z","time_to_close":3036124,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"chardet","old_version":"3.0.4","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":null,"ecosystem":"pip"},"body":"Bumps [chardet](https://github.com/chardet/chardet) from 3.0.4 to 7.4.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/3.0.4...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chardet\u0026package-manager=pip\u0026previous-version=3.0.4\u0026new-version=7.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/UnstoppableAwesomeness/NBC-Bot/pull/417","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/UnstoppableAwesomeness%2FNBC-Bot/issues/417","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/417/packages"}],"issue_packages":[{"old_version":"\u003e=5.2.0","new_version":"\u003e=7.4.3","update_type":"minor","path":null,"pr_created_at":"2026-06-07T08:31:19.000Z","version_change":"\u003e=5.2.0 → \u003e=7.4.3","issue":{"uuid":"4606690973","node_id":"PR_kwDOSnHVas7jl5vr","number":5,"state":"open","title":"chore(deps): update chardet requirement from \u003e=5.2.0 to \u003e=7.4.3","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-07T08:31:19.000Z","updated_at":"2026-06-07T08:31:20.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"chardet","old_version":"\u003e=5.2.0","new_version":"\u003e=7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [chardet](https://github.com/chardet/chardet) 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/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore 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/iando0911/traffic-data-pipeline/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/iando0911%2Ftraffic-data-pipeline/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"}},{"old_version":"5.2.0","new_version":"7.4.3","update_type":"major","path":null,"pr_created_at":"2026-05-21T20:30:32.000Z","version_change":"5.2.0 → 7.4.3","issue":{"uuid":"4497706092","node_id":"PR_kwDOMoSnVc7eGHAt","number":463,"state":"closed","title":"Bump the uv-batch group across 1 directory with 28 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-22T21:55:48.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-21T20:30:32.000Z","updated_at":"2026-05-22T21:55:50.000Z","time_to_close":91516,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"uv-batch","update_count":28,"packages":[{"name":"requests","old_version":"2.32.5","new_version":"2.33.1","repository_url":"https://github.com/psf/requests"},{"name":"chardet","old_version":"5.2.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"psutil","old_version":"7.1.3","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"rapidfuzz","old_version":"3.10.1","new_version":"3.14.5","repository_url":"https://github.com/rapidfuzz/RapidFuzz"},{"name":"websockets","old_version":"15.0.1","new_version":"16.0","repository_url":"https://github.com/python-websockets/websockets"},{"name":"regex","old_version":"2025.10.23","new_version":"2026.4.4","repository_url":"https://github.com/mrabarnett/mrab-regex"},{"name":"opencv-python","old_version":"4.12.0.88","new_version":"4.13.0.92","repository_url":"https://github.com/opencv/opencv-python"},{"name":"oneocr","old_version":"1.0.10","new_version":"1.0.12","repository_url":"https://github.com/AuroraWright/oneocr"},{"name":"groq","old_version":"0.33.0","new_version":"1.2.0","repository_url":"https://github.com/groq/groq-python"},{"name":"torchcodec","old_version":"0.8.1","new_version":"0.11.1","repository_url":"https://github.com/pytorch/torchcodec"},{"name":"torchaudio","old_version":"2.8.0","new_version":"2.11.0","repository_url":"https://github.com/pytorch/audio"},{"name":"torch","old_version":"2.8.0","new_version":"2.11.0","repository_url":"https://github.com/pytorch/pytorch"},{"name":"pillow","old_version":"12.0.0","new_version":"12.2.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"openai","old_version":"2.6.1","new_version":"2.32.0","repository_url":"https://github.com/openai/openai-python"},{"name":"jaconv","old_version":"0.4.1","new_version":"0.5.0","repository_url":"https://github.com/ikegami-yukino/jaconv"},{"name":"pyobjc","old_version":"10.3.2","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"pyqt6","old_version":"6.10.2","new_version":"6.11.0"},{"name":"tokenizers","old_version":"0.22.1","new_version":"0.22.2","repository_url":"https://github.com/huggingface/tokenizers"},{"name":"curl-cffi","old_version":"0.13.0","new_version":"0.15.0","repository_url":"https://github.com/lexiforest/curl_cffi"},{"name":"py7zr","old_version":"1.0.0","new_version":"1.1.0","repository_url":"https://github.com/miurahr/py7zr"},{"name":"uv","old_version":"0.9.30","new_version":"0.11.7","repository_url":"https://github.com/astral-sh/uv"},{"name":"pip","old_version":"25.3","new_version":"26.0.1","repository_url":"https://github.com/pypa/pip"},{"name":"onnxruntime","old_version":"1.23.2","new_version":"1.24.3","repository_url":"https://github.com/microsoft/onnxruntime"},{"name":"google-genai","old_version":"1.70.0","new_version":"1.73.1","repository_url":"https://github.com/googleapis/python-genai"},{"name":"pytest","old_version":"9.0.2","new_version":"9.0.3","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"hypothesis","old_version":"6.151.11","new_version":"6.152.1","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ruff","old_version":"0.15.9","new_version":"0.15.11","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv-batch group with 27 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.1` |\n| [chardet](https://github.com/chardet/chardet) | `5.2.0` | `7.4.3` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.1.3` | `7.2.2` |\n| [rapidfuzz](https://github.com/rapidfuzz/RapidFuzz) | `3.10.1` | `3.14.5` |\n| [websockets](https://github.com/python-websockets/websockets) | `15.0.1` | `16.0` |\n| [regex](https://github.com/mrabarnett/mrab-regex) | `2025.10.23` | `2026.4.4` |\n| [opencv-python](https://github.com/opencv/opencv-python) | `4.12.0.88` | `4.13.0.92` |\n| [oneocr](https://github.com/AuroraWright/oneocr) | `1.0.10` | `1.0.12` |\n| [groq](https://github.com/groq/groq-python) | `0.33.0` | `1.2.0` |\n| [torchcodec](https://github.com/pytorch/torchcodec) | `0.8.1` | `0.11.1` |\n| [torchaudio](https://github.com/pytorch/audio) | `2.8.0` | `2.11.0` |\n| [torch](https://github.com/pytorch/pytorch) | `2.8.0` | `2.11.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.0.0` | `12.2.0` |\n| [openai](https://github.com/openai/openai-python) | `2.6.1` | `2.32.0` |\n| [jaconv](https://github.com/ikegami-yukino/jaconv) | `0.4.1` | `0.5.0` |\n| [pyobjc](https://github.com/ronaldoussoren/pyobjc) | `10.3.2` | `12.1` |\n| [pyqt6](https://www.riverbankcomputing.com/software/pyqt/) | `6.10.2` | `6.11.0` |\n| [tokenizers](https://github.com/huggingface/tokenizers) | `0.22.1` | `0.22.2` |\n| [curl-cffi](https://github.com/lexiforest/curl_cffi) | `0.13.0` | `0.15.0` |\n| [py7zr](https://github.com/miurahr/py7zr) | `1.0.0` | `1.1.0` |\n| [uv](https://github.com/astral-sh/uv) | `0.9.30` | `0.11.7` |\n| [pip](https://github.com/pypa/pip) | `25.3` | `26.0.1` |\n| [onnxruntime](https://github.com/microsoft/onnxruntime) | `1.23.2` | `1.24.3` |\n| [google-genai](https://github.com/googleapis/python-genai) | `1.70.0` | `1.73.1` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.2` | `9.0.3` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.151.11` | `6.152.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.9` | `0.15.11` |\n\n\nUpdates `requests` from 2.32.5 to 2.33.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.33.1\u003c/h2\u003e\n\u003ch2\u003e2.33.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\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/ferdnyc\"\u003e\u003ccode\u003e@​ferdnyc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7277\"\u003epsf/requests#7277\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2331-2026-03-30\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2331-2026-03-30\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.33.0\u003c/h2\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that uses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report any gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts contents to a non-deterministic location to prevent malicious file replacement. This does not affect default usage of Requests, only applications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause malformed authentication to be applied to Requests on Python 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/M0d3v1\"\u003e\u003ccode\u003e@​M0d3v1\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6865\"\u003epsf/requests#6865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aminvakil\"\u003e\u003ccode\u003e@​aminvakil\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7220\"\u003epsf/requests#7220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/E8Price\"\u003e\u003ccode\u003e@​E8Price\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6960\"\u003epsf/requests#6960\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7244\"\u003epsf/requests#7244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/magsen\"\u003e\u003ccode\u003e@​magsen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6553\"\u003epsf/requests#6553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Rohan5commit\"\u003e\u003ccode\u003e@​Rohan5commit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7227\"\u003epsf/requests#7227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.33.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that\nuses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report\nany gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts\ncontents to a non-deterministic location to prevent malicious file\nreplacement. This does not affect default usage of Requests, only\napplications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause\nmalformed authentication to be applied to Requests on\nPython 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/111d2b77790bf49943c0dfa09b365371c24aec7e\"\u003e\u003ccode\u003e111d2b7\u003c/code\u003e\u003c/a\u003e v2.33.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/f0198e6dfc431a2293dc16e1b1e8fcddc910a7f3\"\u003e\u003ccode\u003ef0198e6\u003c/code\u003e\u003c/a\u003e Fix malformed value parsing for Content-Type (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc7dd0fc4d56e808bcdd85ac2d797b3107c89259\"\u003e\u003ccode\u003ebc7dd0f\u003c/code\u003e\u003c/a\u003e Fix cosmetic header validity parsing regex (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4443b1a847b190010c2972a658924b98b5db6360\"\u003e\u003ccode\u003e4443b1a\u003c/code\u003e\u003c/a\u003e Fix unintended test extra (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7306\"\u003e#7306\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/389eea58dfb2f2ee096421a812e3af29c0298951\"\u003e\u003ccode\u003e389eea5\u003c/code\u003e\u003c/a\u003e Cleanup extracted file after extract_zipped_path test (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7407309c8a8a73aa2f4337184025d440bbedab7a\"\u003e\u003ccode\u003e7407309\u003c/code\u003e\u003c/a\u003e Packaging: DRY out extras definition (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7277\"\u003e#7277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc04dfd6dad4cb02cd92f5daa81eb562d280a761\"\u003e\u003ccode\u003ebc04dfd\u003c/code\u003e\u003c/a\u003e v2.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/66d21cb07bd6255b1280291c4fafb71803cdb3b7\"\u003e\u003ccode\u003e66d21cb\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/8b9bc8fc0f63be84602387913c4b689f19efd028\"\u003e\u003ccode\u003e8b9bc8f\u003c/code\u003e\u003c/a\u003e Move badges to top of README (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7293\"\u003e#7293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e331a288f369973f5de0ec8901c94cae4fa87286\"\u003e\u003ccode\u003ee331a28\u003c/code\u003e\u003c/a\u003e Remove unused extraction call (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7292\"\u003e#7292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.33.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `chardet` from 5.2.0 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.1.3 to 7.2.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/giampaolo/psutil/blob/master/docs/changelog.rst\"\u003epsutil's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e7.2.2 — 2026-01-28\n^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eEnhancements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2705\u003c/code\u003e: [Linux]: :meth:\u003ccode\u003eProcess.wait\u003c/code\u003e now uses \u003ccode\u003epidfd_open()\u003c/code\u003e +\n\u003ccode\u003epoll()\u003c/code\u003e (no busy loop). Requires Linux \u0026gt;= 5.3 and Python \u0026gt;= 3.9.\u003c/li\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2705\u003c/code\u003e: [macOS], [BSD]: :meth:\u003ccode\u003eProcess.wait\u003c/code\u003e now uses \u003ccode\u003ekqueue()\u003c/code\u003e (no\nbusy loop).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2701\u003c/code\u003e, [macOS]: fix compilation error on macOS \u0026lt; 10.7. (patch by\n:user:\u003ccode\u003eSergey Fedorov \u0026lt;barracuda156\u0026gt;\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2707\u003c/code\u003e, [macOS]: fix potential memory leaks in error paths of\n:meth:\u003ccode\u003eProcess.memory_full_info\u003c/code\u003e and :meth:\u003ccode\u003eProcess.threads\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2708\u003c/code\u003e, [macOS]: :meth:\u003ccode\u003eProcess.cmdline\u003c/code\u003e and :meth:\u003ccode\u003eProcess.environ\u003c/code\u003e may\nfail with \u003ccode\u003eOSError: [Errno 0] Undefined error\u003c/code\u003e (from\n\u003ccode\u003esysctl(KERN_PROCARGS2)\u003c/code\u003e). They now raise :exc:\u003ccode\u003eAccessDenied\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e7.2.1 — 2025-12-29\n^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2699\u003c/code\u003e, [FreeBSD], [NetBSD]: :func:\u003ccode\u003eheap_info\u003c/code\u003e does not detect small\nallocations (\u0026lt;= 1K). In order to fix that, we now flush internal jemalloc\ncache before fetching the metrics.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e7.2.0 — 2025-12-23\n^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eEnhancements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:gh:\u003ccode\u003e1275\u003c/code\u003e: new :func:\u003ccode\u003eheap_info\u003c/code\u003e and :func:\u003ccode\u003eheap_trim\u003c/code\u003e functions, providing\ndirect access to the platform's native C :term:\u003ccode\u003eheap\u003c/code\u003e allocator (glibc,\nmimalloc, libmalloc). Useful to create tools to detect memory leaks.\u003c/li\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2403\u003c/code\u003e, [Linux]: publish wheels for Linux musl.\u003c/li\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2680\u003c/code\u003e: unit tests are no longer installed / part of the distribution.\nThey now live under \u003ccode\u003etests/\u003c/code\u003e instead of \u003ccode\u003epsutil/tests\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2684\u003c/code\u003e, [FreeBSD], [critical]: compilation fails on FreeBSD 14 due to\nmissing include.\u003c/li\u003e\n\u003cli\u003e:gh:\u003ccode\u003e2691\u003c/code\u003e, [Windows]: fix memory leak in :func:\u003ccode\u003enet_if_stats\u003c/code\u003e due to missing\n\u003ccode\u003ePy_CLEAR\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eCompatibility notes\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/giampaolo/psutil/commit/9eea97dd6f1d16ea33f5144c8925f1ce7a0688e1\"\u003e\u003ccode\u003e9eea97d\u003c/code\u003e\u003c/a\u003e Pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/938ac647418f09e4e610b2c755741316713c5592\"\u003e\u003ccode\u003e938ac64\u003c/code\u003e\u003c/a\u003e Rm sphinxcontrib.googleanalytics; override layout.html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/9dcbb7e60e650f0ab0cb52154b0a12c70f6a1e4c\"\u003e\u003ccode\u003e9dcbb7e\u003c/code\u003e\u003c/a\u003e Add sphinxcontrib-googleanalytics to requirements.txt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/76eaf9ae0f2868569c14b46f4165310885a40a15\"\u003e\u003ccode\u003e76eaf9a\u003c/code\u003e\u003c/a\u003e Try to add google analytics to doc\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/de1cafa56f54e97ca557993155e76dd98877e136\"\u003e\u003ccode\u003ede1cafa\u003c/code\u003e\u003c/a\u003e Update doc mentioning Process.wait() internal details\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/bb30943b0336a16f28437ec549c15a8ad2830cca\"\u003e\u003ccode\u003ebb30943\u003c/code\u003e\u003c/a\u003e Refact can_use_pidfd_open() and can_use_kqueue()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/a571717d6520d436273c8cb34ca871db4bfa508a\"\u003e\u003ccode\u003ea571717\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/giampaolo/psutil/issues/2708\"\u003e#2708\u003c/a\u003e, macos / cmdline / environ; raise AD instead of OSError(0) (\u003ca href=\"https://redirect.github.com/giampaolo/psutil/issues/2709\"\u003e#2709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/8b98c3effc20dcc4ed08c8f3d33e11ec0f5445b1\"\u003e\u003ccode\u003e8b98c3e\u003c/code\u003e\u003c/a\u003e Pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/700b7e6a4171ae7c775679217205f1d97568ae00\"\u003e\u003ccode\u003e700b7e6\u003c/code\u003e\u003c/a\u003e [macOS] fix potential leaks in error paths (\u003ca href=\"https://redirect.github.com/giampaolo/psutil/issues/2707\"\u003e#2707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/giampaolo/psutil/commit/7cc7923a1479fb1d32bb25d3e78b465e2695fbf7\"\u003e\u003ccode\u003e7cc7923\u003c/code\u003e\u003c/a\u003e Windows / cmdline(): be more defensive in free()ing in case of error\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/giampaolo/psutil/compare/v7.1.3...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `rapidfuzz` from 3.10.1 to 3.14.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/rapidfuzz/RapidFuzz/releases\"\u003erapidfuzz's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 3.14.5\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix release ci attempting to upload a pyodide wheel\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.14.4\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd risc64 wheels\u003c/li\u003e\n\u003cli\u003eadd support for taskflow 4.0.0\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eupgrade to \u003ccode\u003eCython==3.2.4\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix type hints for extractOne when no score_cutoff is provided\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.14.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd missing pypy and freethreaded linux wheels\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edrop s390x and ppc64le wheels since they are virtually unused and require extremely long to build under emulation\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.14.2\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eupgrade to \u003ccode\u003eCython==3.1.6\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eenable free threading\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.14.1\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFully disable line tracing in release builds\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.14.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eupgrade to \u003ccode\u003eCython==3.1.3\u003c/code\u003e. This enables compilation with free threaded python.\u003c/li\u003e\n\u003cli\u003eupgrade to \u003ccode\u003erapidfuzz-cpp==3.3\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd support for freethreaded Python\u003c/li\u003e\n\u003cli\u003eadd python 3.14 wheels\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edropped support for Python3.9\u003c/li\u003e\n\u003cli\u003edrop 32 bit linux wheels\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eremove unused hook-dirs from pyinstaller config to fix a warning\u003c/li\u003e\n\u003cli\u003efixed WRatio for a length ratio of exactly 8.0\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.13.0\u003c/h2\u003e\n\u003ch2\u003eAdded\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/rapidfuzz/RapidFuzz/blob/main/CHANGELOG.rst\"\u003erapidfuzz's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cp\u003e[3.14.5] - 2026-08-07\n^^^^^^^^^^^^^^^^^^^^^\nFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e* fix release ci attempting to upload a pyodide wheel\n\u003cp\u003e[3.14.4] - 2026-04-06\n^^^^^^^^^^^^^^^^^^^^^\nAdded\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eadd risc64 wheels\u003c/li\u003e\n\u003cli\u003eadd support for taskflow 4.0.0\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e* upgrade to ``Cython==3.2.4``.\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e* fix type hints for extractOne when no score_cutoff is provided\n\n[3.14.3] - 2025-11-01\n^^^^^^^^^^^^^^^^^^^^^\nFixed\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eadd missing pypy and freethreaded linux wheels\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edrop s390x and ppc64le wheels since they are virtually unused and require extremly long to build under emulation\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e[3.14.2] - 2025-10-30\n^^^^^^^^^^^^^^^^^^^^^\nChanged\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e* upgrade to ``Cython==3.1.6``\n* enable free threading\n\u003cp\u003e[3.14.1] - 2025-09-08\n^^^^^^^^^^^^^^^^^^^^^\nFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e* Fully disable line tracing in release builds\n\n[3.14.0] - 2025-08-27\n^^^^^^^^^^^^^^^^^^^^^\nChanged\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/edf9f3c2d016c878dae1511301f8b4a501bba871\u0026quot;\u0026gt;\u0026lt;code\u0026gt;edf9f3c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; fix release ci\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/3d8470bf60062dda5c200517f61a8ff43e3e9ef2\u0026quot;\u0026gt;\u0026lt;code\u0026gt;3d8470b\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; enable verbose publish\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/7fd4ee202b5e3cc9f158f505a33d934a68c14148\u0026quot;\u0026gt;\u0026lt;code\u0026gt;7fd4ee2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Bump the github-actions group across 1 directory with 3 updates\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/9691cf1bf985eaf59f6c968f3d7cd8e59054ebaa\u0026quot;\u0026gt;\u0026lt;code\u0026gt;9691cf1\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; tag release\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/fd16748843be7d1a4842604fa3429e3943e80e5c\u0026quot;\u0026gt;\u0026lt;code\u0026gt;fd16748\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; ci: switch riscv64 from QEMU to native RISE runner\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/7f7d58b91a2716eaaec939a72b476ab1bf1ead1b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;7f7d58b\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; ci: add riscv64 wheel builds via QEMU\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/f4b56942bdbbb99bba556656ea8a0aef1e8c12f0\u0026quot;\u0026gt;\u0026lt;code\u0026gt;f4b5694\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Bump pypa/cibuildwheel from 3.3.1 to 3.4.0 in the github-actions group\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/f2873ce9868285eca1d05d8645791d76a2b545fe\u0026quot;\u0026gt;\u0026lt;code\u0026gt;f2873ce\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Bump the github-actions group across 1 directory with 3 updates\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/4e48509d858454ea994521f90ae8c5d66eb15073\u0026quot;\u0026gt;\u0026lt;code\u0026gt;4e48509\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; support Taskflow 4.0.0\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/commit/70480396a66fadabd897407ce289978dec2c13c0\u0026quot;\u0026gt;\u0026lt;code\u0026gt;7048039\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Bump the github-actions group across 1 directory with 4 updates\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/rapidfuzz/RapidFuzz/compare/v3.10.1...v3.14.5\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `websockets` from 15.0.1 to 16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-websockets/websockets/releases\"\u003ewebsockets's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e16.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://websockets.readthedocs.io/en/stable/project/changelog.html\"\u003ehttps://websockets.readthedocs.io/en/stable/project/changelog.html\u003c/a\u003e for details.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/d4303a5d3e373fc8c34177c3dec1a9c75c8865fa\"\u003e\u003ccode\u003ed4303a5\u003c/code\u003e\u003c/a\u003e Release version 16.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/851bcd756bf114e41438f04d928aa85838724fe1\"\u003e\u003ccode\u003e851bcd7\u003c/code\u003e\u003c/a\u003e Bump pypa/cibuildwheel from 3.3.0 to 3.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/740c8d373e10ced940fb33c3e0457991841c10c4\"\u003e\u003ccode\u003e740c8d3\u003c/code\u003e\u003c/a\u003e Temporarily remove the trio implementation.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/92ea0553587ba07a4668c30dfd9e6210d9f26bc9\"\u003e\u003ccode\u003e92ea055\u003c/code\u003e\u003c/a\u003e Add missing changelog entry.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/ba74244154df5a74f044d0f8cd971acac636bb74\"\u003e\u003ccode\u003eba74244\u003c/code\u003e\u003c/a\u003e Document bug fix.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/9410483c016463a6cd08b2a5321337b85e094f10\"\u003e\u003ccode\u003e9410483\u003c/code\u003e\u003c/a\u003e Pin sphinx to avoid error in sphinxcontrib-trio.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/8e4d408e17b0bfa1a91aa62e054b8786a8132231\"\u003e\u003ccode\u003e8e4d408\u003c/code\u003e\u003c/a\u003e Document asyncio's TLS read buffer.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/cb3500b0b030715dc3caa1e3ce95affe4a79b8bd\"\u003e\u003ccode\u003ecb3500b\u003c/code\u003e\u003c/a\u003e Stop referring to the asyncio implementation as new.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/6563a9c884d92df4c889bb174dc84a56a7377686\"\u003e\u003ccode\u003e6563a9c\u003c/code\u003e\u003c/a\u003e The threading implementation supports max_queue.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-websockets/websockets/commit/9f17e92dbee2b9a14e02b2792cfbb127efbd4098\"\u003e\u003ccode\u003e9f17e92\u003c/code\u003e\u003c/a\u003e Clarify that protocol_mutex protects pending_pings.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-websockets/websockets/compare/15.0.1...16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `regex` from 2025.10.23 to 2026.4.4\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.5.9\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eReverse matching with full unicode casefolding could lead to out-of-range string indexes.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.4.4\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eA fix for older Python versions before free-threading was  supported.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.4.3\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eMore fixes for free-threading.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.3.32\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eFixed segfault.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.3.31\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eFixed bug again.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.3.30\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eFixed bug.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.3.28\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eFixed version.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.3.27\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eVarious fixes, including ones to improve free-threading support.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.2.28\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eReplaced atomic operations with mutex on pattern object for free-threaded Python.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVersion: 2026.2.26\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ePR [#598](https://github.com/mrabarnett/mrab-regex/issues/598): Fix race condition in storage caching with atomic operations.\n\u003cp\u003eReplaced use of PyUnicode_GET_LENGTH with PyUnicode_GetLength.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eVersion: 2026.2.19\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eAdded \\z as alias of \\Z, like in re module.\n\u003cp\u003eAdded prefixmatch as alias of match, like in re module.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eVersion: 2026.1.15\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/bc57b04b00de68590345ac2eb621b9a8dd222d7d\"\u003e\u003ccode\u003ebc57b04\u003c/code\u003e\u003c/a\u003e A fix for older Python versions before free-threading was  supported.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/773e213b5d7a78806e795d2513a37345dc793e97\"\u003e\u003ccode\u003e773e213\u003c/code\u003e\u003c/a\u003e More fixes for free-threading.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/5d51c75da03116e08bb6fb537fae6d8c804cc92c\"\u003e\u003ccode\u003e5d51c75\u003c/code\u003e\u003c/a\u003e Fixed segfault.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/2aff2db5542ec5b58705be6ddb7b69a99d3e38a8\"\u003e\u003ccode\u003e2aff2db\u003c/code\u003e\u003c/a\u003e Fixed bug again.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/16af8aed2b3211e90588d2ac96f7c588ed477b2c\"\u003e\u003ccode\u003e16af8ae\u003c/code\u003e\u003c/a\u003e Fixed bug.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/2356563bbfd51b3986320a866c35a50b89833949\"\u003e\u003ccode\u003e2356563\u003c/code\u003e\u003c/a\u003e Fixed bug.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/f579e8ff60e2993a11cf4fd96748e4b7866c9fed\"\u003e\u003ccode\u003ef579e8f\u003c/code\u003e\u003c/a\u003e Fixed version.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/55315a0497722898bed8286a596a64db698f498e\"\u003e\u003ccode\u003e55315a0\u003c/code\u003e\u003c/a\u003e Fixed version.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/923d78e39b8ff92db67606be3bfbc2e595b6475a\"\u003e\u003ccode\u003e923d78e\u003c/code\u003e\u003c/a\u003e Various fixes, including ones to improve free-threading support.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mrabarnett/mrab-regex/commit/df2d5ac9983af6febc0c2f32aff396a06142f8cb\"\u003e\u003ccode\u003edf2d5ac\u003c/code\u003e\u003c/a\u003e Replaced atomic operations with mutex on pattern object for free-threaded Pyt...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mrabarnett/mrab-regex/compare/2025.10.23...2026.4.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opencv-python` from 4.12.0.88 to 4.13.0.92\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/opencv/opencv-python/releases\"\u003eopencv-python's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0.92\u003c/h2\u003e\n\u003cp\u003eFollow up release for 4.13.0 with X server dependency fix. See \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/28438\"\u003e#28438\u003c/a\u003e for details.\u003c/p\u003e\n\u003ch2\u003e4.13.0.90\u003c/h2\u003e\n\u003cp\u003eComplete OpenCV 4.13.0 changelog: \u003ca href=\"https://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4130\"\u003ehttps://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4130\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ePython specific:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eManylinux 2_28 support, Numpy 2.4 support, Python 3.14 support\u003c/li\u003e\n\u003cli\u003eTuned Python bindings for logging \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27812\"\u003e#27812\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMarked Feature2D.detectAndCompute mask as optional in Python type stubs \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27544\"\u003e#27544\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMarked distCoeffs/R/D as optional in calib3d functions \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27564\"\u003e#27564\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded DLPACK support \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27581\"\u003e#27581\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27861\"\u003e#27861\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed memory leaks in pybindings \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27738\"\u003e#27738\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd PathLike type hints for args annotated with CV_WRAP_FILE_PATH \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27767\"\u003e#27767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed memory leak in pyopencv_to for path-like objects \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/28047\"\u003e#28047\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTunned Python bindings: use export_name as resolved typename for AliasTypeNode \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27997\"\u003e#27997\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003epython: fix pytest-cov false warnings by using compile() with full file path in exec_file_wrapper \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/28093\"\u003e#28093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed python scalar typing issues \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27620\"\u003e#27620\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed bug in ifdef state machine in header parser for bindings \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27393\"\u003e#27393\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWrap GridType field in cv::findCirclesGrid parameters structure \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27689\"\u003e#27689\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/opencv/opencv-python/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `oneocr` from 1.0.10 to 1.0.12\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/AuroraWright/oneocr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `groq` from 0.33.0 to 1.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/groq/groq-python/releases\"\u003egroq's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.0\u003c/h2\u003e\n\u003ch2\u003e1.2.0 (2026-04-18)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/groq/groq-python/compare/v1.1.2...v1.2.0\"\u003ev1.1.2...v1.2.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e implement indices array format for query and form serialization (\u003ca href=\"https://github.com/groq/groq-python/commit/80ca9750622cdd94562c34de4ef69326fdb78dd7\"\u003e80ca975\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e preserve hardcoded query params when merging with user params (\u003ca href=\"https://github.com/groq/groq-python/commit/ff12a2087a814e0baf815d0ee89dd73f18e13bae\"\u003eff12a20\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eensure file data are only sent as 1 parameter (\u003ca href=\"https://github.com/groq/groq-python/commit/f67099c22321d15021f283526c9cb85a58d98a8f\"\u003ef67099c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e optimize file structure copying in multipart requests (\u003ca href=\"https://github.com/groq/groq-python/commit/22d711f2bc262fe3bf8633d1a6c087f43c852c7d\"\u003e22d711f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.20.1 (\u003ca href=\"https://github.com/groq/groq-python/commit/f031213b83b91aba73d67806d4a85c3b71351582\"\u003ef031213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.20.2 (\u003ca href=\"https://github.com/groq/groq-python/commit/66e56a7ea574ce79d17c8bc0c2d02d1d2f23608c\"\u003e66e56a7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.22.1 (\u003ca href=\"https://github.com/groq/groq-python/commit/65e653508867f1c7cba8f83d4c56083577718bbe\"\u003e65e6535\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eimprove examples (\u003ca href=\"https://github.com/groq/groq-python/commit/9b75c4cb0c78c759df1ee4fbd0751ecf09328745\"\u003e9b75c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.1.2\u003c/h2\u003e\n\u003ch2\u003e1.1.2 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/groq/groq-python/compare/v1.1.1...v1.1.2\"\u003ev1.1.1...v1.1.2\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e bump minimum typing-extensions version (\u003ca href=\"https://github.com/groq/groq-python/commit/3ef90d5a347a277257127abcba3f457ca35d5485\"\u003e3ef90d5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003epydantic:\u003c/strong\u003e do not pass \u003ccode\u003eby_alias\u003c/code\u003e unless set (\u003ca href=\"https://github.com/groq/groq-python/commit/f84dd8ce6be887992445f10af1aac8102b2c6423\"\u003ef84dd8c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esanitize endpoint path params (\u003ca href=\"https://github.com/groq/groq-python/commit/4e57480cbe6e7d85353d04c49f931a300ff50436\"\u003e4e57480\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eci:\u003c/strong\u003e skip lint on metadata-only changes (\u003ca href=\"https://github.com/groq/groq-python/commit/e34867c6f89e39d61fb18fd7710222dd8740bac6\"\u003ee34867c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e tweak CI branches (\u003ca href=\"https://github.com/groq/groq-python/commit/5ec930859c7c819fe5fe5b565fa1c4046fa8274e\"\u003e5ec9308\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e update gitignore (\u003ca href=\"https://github.com/groq/groq-python/commit/29f97bf5c11c1fb49276c8e080b1b0d24d156ba8\"\u003e29f97bf\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.19.4 (\u003ca href=\"https://github.com/groq/groq-python/commit/7c9854eaa8532f4611e169e0b76bed87f80dc2cb\"\u003e7c9854e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- 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/groq/groq-python/blob/main/CHANGELOG.md\"\u003egroq's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.2.0 (2026-04-18)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/groq/groq-python/compare/v1.1.2...v1.2.0\"\u003ev1.1.2...v1.2.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e implement indices array format for query and form serialization (\u003ca href=\"https://github.com/groq/groq-python/commit/80ca9750622cdd94562c34de4ef69326fdb78dd7\"\u003e80ca975\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e preserve hardcoded query params when merging with user params (\u003ca href=\"https://github.com/groq/groq-python/commit/ff12a2087a814e0baf815d0ee89dd73f18e13bae\"\u003eff12a20\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eensure file data are only sent as 1 parameter (\u003ca href=\"https://github.com/groq/groq-python/commit/f67099c22321d15021f283526c9cb85a58d98a8f\"\u003ef67099c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e optimize file structure copying in multipart requests (\u003ca href=\"https://github.com/groq/groq-python/commit/22d711f2bc262fe3bf8633d1a6c087f43c852c7d\"\u003e22d711f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.20.1 (\u003ca href=\"https://github.com/groq/groq-python/commit/f031213b83b91aba73d67806d4a85c3b71351582\"\u003ef031213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.20.2 (\u003ca href=\"https://github.com/groq/groq-python/commit/66e56a7ea574ce79d17c8bc0c2d02d1d2f23608c\"\u003e66e56a7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.22.1 (\u003ca href=\"https://github.com/groq/groq-python/commit/65e653508867f1c7cba8f83d4c56083577718bbe\"\u003e65e6535\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eimprove examples (\u003ca href=\"https://github.com/groq/groq-python/commit/9b75c4cb0c78c759df1ee4fbd0751ecf09328745\"\u003e9b75c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.1.2 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/groq/groq-python/compare/v1.1.1...v1.1.2\"\u003ev1.1.1...v1.1.2\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e bump minimum typing-extensions version (\u003ca href=\"https://github.com/groq/groq-python/commit/3ef90d5a347a277257127abcba3f457ca35d5485\"\u003e3ef90d5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003epydantic:\u003c/strong\u003e do not pass \u003ccode\u003eby_alias\u003c/code\u003e unless set (\u003ca href=\"https://github.com/groq/groq-python/commit/f84dd8ce6be887992445f10af1aac8102b2c6423\"\u003ef84dd8c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esanitize endpoint path params (\u003ca href=\"https://github.com/groq/groq-python/commit/4e57480cbe6e7d85353d04c49f931a300ff50436\"\u003e4e57480\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eci:\u003c/strong\u003e skip lint on metadata-only changes (\u003ca href=\"https://github.com/groq/groq-python/commit/e34867c6f89e39d61fb18fd7710222dd8740bac6\"\u003ee34867c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e tweak CI branches (\u003ca href=\"https://github.com/groq/groq-python/commit/5ec930859c7c819fe5fe5b565fa1c4046fa8274e\"\u003e5ec9308\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e update gitignore (\u003ca href=\"https://github.com/groq/groq-python/commit/29f97bf5c11c1fb49276c8e080b1b0d24d156ba8\"\u003e29f97bf\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.19.4 (\u003ca href=\"https://github.com/groq/groq-python/commit/7c9854eaa8532f4611e169e0b76bed87f80dc2cb\"\u003e7c9854e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.19.5 (\u003ca href=\"https://github.com/groq/groq-python/commit/e3a0370c2b379156e24816c471e1423b09c1eb99\"\u003ee3a0370\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.19.6 (\u003ca href=\"https://github.com/groq/groq-python/commit/001301b292c08a94b41eb2fab8be04720fda2c78\"\u003e001301b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/fcdebf0b4318b651e42dc4ff67c859c525cbf0bb\"\u003e\u003ccode\u003efcdebf0\u003c/code\u003e\u003c/a\u003e release: 1.2.0 (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/270\"\u003e#270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/9793d5e9c3993ee7b7b0a9b75a7f324ac7de0323\"\u003e\u003ccode\u003e9793d5e\u003c/code\u003e\u003c/a\u003e release: 1.1.2 (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/269\"\u003e#269\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/210cc4fcaee7fa02d731b9066209385e6b3288fd\"\u003e\u003ccode\u003e210cc4f\u003c/code\u003e\u003c/a\u003e release: 1.1.1 (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/268\"\u003e#268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/3203b083eacecc3c4cfaf4c3fa66b17b53b52801\"\u003e\u003ccode\u003e3203b08\u003c/code\u003e\u003c/a\u003e release: 1.1.0 (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/263\"\u003e#263\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/5f0082afd5ba6b28f9842e41bfc1dabe5ab075a8\"\u003e\u003ccode\u003e5f0082a\u003c/code\u003e\u003c/a\u003e fix: use valid Python version and fix mypy lint error (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/267\"\u003e#267\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/01190ecbbb5b0c2afe107fabb02195ce7521e2e1\"\u003e\u003ccode\u003e01190ec\u003c/code\u003e\u003c/a\u003e chore: deprecate Python 3.9 support (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/264\"\u003e#264\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/1dd148ef082c4f86efab3b8f16f7d920096c0841\"\u003e\u003ccode\u003e1dd148e\u003c/code\u003e\u003c/a\u003e Update CODEOWNERS (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/265\"\u003e#265\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/ec09723903b08454ad351627c7d9ba58b547278d\"\u003e\u003ccode\u003eec09723\u003c/code\u003e\u003c/a\u003e release: 1.0.0 (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/262\"\u003e#262\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/b03b94b13a28855e67baf7c47153f9792c02d6d3\"\u003e\u003ccode\u003eb03b94b\u003c/code\u003e\u003c/a\u003e release: 0.37.1 (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/groq/groq-python/commit/846b03892afb06d743b438a748620912bf68e295\"\u003e\u003ccode\u003e846b038\u003c/code\u003e\u003c/a\u003e release: 0.37.0 (\u003ca href=\"https://redirect.github.com/groq/groq-python/issues/259\"\u003e#259\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/groq/groq-python/compare/v0.33.0...v1.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `torchcodec` from 0.8.1 to 0.11.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytorch/torchcodec/releases\"\u003etorchcodec's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eTorchCodec 0.11.1\u003c/h2\u003e\n\u003cp\u003eWe are releasing TorchCodec 0.11.1 as a bug-fix release, and it is compatible with torch 2.11.\u003c/p\u003e\n\u003ch3\u003eThe fix:\u003c/h3\u003e\n\u003cp\u003eIn \u003ca href=\"https://github.com/meta-pytorch/torchcodec/releases/tag/v0.11.0\"\u003e0.11\u003c/a\u003e, we began uploading CUDA 13.0 linux wheels to PyPI, so \u003ccode\u003epip install torchcodec\u003c/code\u003e would install a CUDA enabled wheel. This caused an error at import time for users without the necessary CUDA libraries, or for users who only wanted to use CPU decoding.\u003c/p\u003e\n\u003cp\u003eTorchcodec 0.11.1 reverts this change, so \u003ccode\u003epip install torchcodec\u003c/code\u003e will install the CPU wheel. We will resume uploading CUDA wheels as torch does in torchcodec version 0.12!\u003c/p\u003e\n\u003cp\u003eAs before, CUDA wheels are available by specifying the \u003ccode\u003eindex-url\u003c/code\u003e argument:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epip install torchcodec --index-url --index-url https://download.pytorch.org/whl/cu130\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eTorchCodec 0.11\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/releases/tag/v0.11.0\"\u003eTorchCodec 0.11\u003c/a\u003e is out! This release brings CUDA decoding improvements and improved HDR metadata and rotation support in VideoDecoder, as well as output fps support!\u003c/p\u003e\n\u003ch2\u003eCUDA decoder performance improvements\u003c/h2\u003e\n\u003cp\u003eWe made significant improvements to the CUDA decoder throughput, available via the\u003ca href=\"https://meta-pytorch.org/torchcodec/stable/generated/torchcodec.decoders.set_cuda_backend.html#torchcodec.decoders.set_cuda_backend\"\u003e “beta” backend\u003c/a\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/meta-pytorch/torchcodec/pull/1232\"\u003e#1232\u003c/a\u003e fixed a bug in the decoder cache, allowing more than one decoder instance to be cached per video configuration. The fix doesn’t affect single-threaded pipelines, but drastically improves the throughput of \u003ca href=\"https://meta-pytorch.org/torchcodec/stable/generated_examples/decoding/parallel_decoding.html#method-4-joblib-multithreading\"\u003emulti-threaded decoding\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/meta-pytorch/torchcodec/pull/1227\"\u003e#1227\u003c/a\u003e improved cache performance further.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/meta-pytorch/torchcodec/pull/1243\"\u003e#1243\u003c/a\u003e added an LRU eviction policy for the cache, which will improve the cache hit when decoding lots of different video configurations.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/meta-pytorch/torchcodec/pull/1246\"\u003e#1246\u003c/a\u003e added the \u003ca href=\"https://meta-pytorch.org/torchcodec/stable/generated/torchcodec.decoders.set_nvdec_cache_capacity.html#torchcodec.decoders.set_nvdec_cache_capacity\"\u003eset_nvdec_cache_capacity()\u003c/a\u003e which allows the user to control the cache size. Larger cache sizes are typically more performant, and more memory consuming.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThese are available via the\u003ca href=\"https://meta-pytorch.org/torchcodec/stable/generated/torchcodec.decoders.set_cuda_backend.html#torchcodec.decoders.set_cuda_backend\"\u003e “beta” backend”\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e⚠️ Note that in the next release, the “beta” backend will become the default backend. This will be a transparent and backward-compatible change. Users who want to stay on the less efficient FFmpeg backend should use:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003ewith set_cuda_backend(\u0026quot;ffmpeg\u0026quot;):\r\n    decoder = VideoDecoder(..., device=\u0026quot;cuda\u0026quot;)\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eRead more about this in the \u003ca href=\"https://meta-pytorch.org/torchcodec/stable/api_ref_decoders.html\"\u003eCUDA utilities section\u003c/a\u003e!\u003c/p\u003e\n\u003ch2\u003eFPS Resampling\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eget_frames_played_in_range()\u003c/code\u003e now accepts a \u003ccode\u003efps\u003c/code\u003e parameter to resample video at a target frame rate, duplicating or dropping frames as necessary to match the desired output FPS:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003edecoder = VideoDecoder(path)\r\n# If a source video is 25 fps, a 1-second range will contain 25 frames.\r\n# We can use the fps argument to resample to 5 fps, which gives us 5 frames:\r\nframes_5fps = decoder.get_frames_played_in_range(start_seconds=1, stop_seconds=2, fps=5)\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eRead the \u003ca href=\"https://meta-pytorch.org/torchcodec/stable/generated/torchcodec.decoders.VideoDecoder.html#torchcodec.decoders.VideoDecoder.get_frames_played_in_range\"\u003eVideoDecoder docs\u003c/a\u003e for more details!\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/meta-pytorch/torchcodec/pull/1148\"\u003e#1148\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003eRotation Support\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/meta-pytorch/torchcodec/commit/e92214396c04fd3e52c8c4c0a4554c626efc9d4b\"\u003e\u003ccode\u003ee922143\u003c/code\u003e\u003c/a\u003e update ver to 0.11.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/c95b831624998d486001c989980bf143da2ed5fb\"\u003e\u003ccode\u003ec95b831\u003c/code\u003e\u003c/a\u003e [RC 0.11] build and test wheels for all versions (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1245\"\u003e#1245\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/0d4ea1084c0a286dbf4c59d62fae4881125b0149\"\u003e\u003ccode\u003e0d4ea10\u003c/code\u003e\u003c/a\u003e install test torch when using version tag\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/d1fc29efbd30ecbfe3e9e51dbd4284e9f3be9a5e\"\u003e\u003ccode\u003ed1fc29e\u003c/code\u003e\u003c/a\u003e Improve example gallery thumbnails (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1287\"\u003e#1287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/b2fc5cf2a9a432fae4706676c427a52fd73ecd75\"\u003e\u003ccode\u003eb2fc5cf\u003c/code\u003e\u003c/a\u003e Fix SwScale error with non-32 aligned input (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1295\"\u003e#1295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/13e2632b9034cd12cc7b343b69abc159b73e0683\"\u003e\u003ccode\u003e13e2632\u003c/code\u003e\u003c/a\u003e Use float64 instead of float32 in time-based samplers (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1294\"\u003e#1294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/a8a257ab67975e0ab14fa12cae17e2363b4d9819\"\u003e\u003ccode\u003ea8a257a\u003c/code\u003e\u003c/a\u003e Migrate torchcodec docs to sphinx theme2 (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/637bbac2f2d89f24b02c749c3f2d375309d22d0d\"\u003e\u003ccode\u003e637bbac\u003c/code\u003e\u003c/a\u003e Update doc build runner (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1286\"\u003e#1286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/d5855c065ad96e1b78dbb7733e9c39abc6b10c7a\"\u003e\u003ccode\u003ed5855c0\u003c/code\u003e\u003c/a\u003e Address internal lint (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1283\"\u003e#1283\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/meta-pytorch/torchcodec/commit/4612dfa66750139be163a4fddbfdeefec2e563e4\"\u003e\u003ccode\u003e4612dfa\u003c/code\u003e\u003c/a\u003e Expose HDR Color metadata (\u003ca href=\"https://redirect.github.com/pytorch/torchcodec/issues/1271\"\u003e#1271\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytorch/torchcodec/compare/v0.8.1...v0.11.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `torchaudio` from 2.8.0 to 2.11.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytorch/audio/releases\"\u003etorchaudio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eTorchAudio 2.11\u003c/h2\u003e\n\u003cp\u003eThis release is compatible with torch 2.11 and is compatible with future versions of torch. No new features were added.\u003c/p\u003e\n\u003ch2\u003eTorchAudio 2.10\u003c/h2\u003e\n\u003cp\u003eThis release is compatible with torch 2.10.\nNo new features were added.\u003c/p\u003e\n\u003cp\u003eThe C++ and CUDA extensions that were previously marked for deprecation are\npreserved and will remain in torchaudio (\u003ccode\u003elfilter\u003c/code\u003e, \u003ccode\u003eRNNTLoss\u003c/code\u003e, \u003ccode\u003eCUCT\u003c/code\u003e, \u003ccode\u003eforced_align\u003c/code\u003e, and \u003ccode\u003eoverdrive\u003c/code\u003e.).\u003c/p\u003e\n\u003cp\u003eThis release marks the finalization of the TorchAudio migration described in \u003ca href=\"https://redirect.github.com/pytorch/audio/issues/3902\"\u003epytorch/audio#3902\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eTorchAudio 2.9.1 Release\u003c/h2\u003e\n\u003cp\u003eThis is a patch release, which is compatible with \u003ca href=\"https://github.com/pytorch/pytorch/releases/tag/v2.9.1\"\u003ePyTorch 2.9.1\u003c/a\u003e. There are no new features added.\u003c/p\u003e\n\u003ch2\u003eTorchAudio 2.9 release\u003c/h2\u003e\n\u003ch3\u003eDeprecated APIs\u003c/h3\u003e\n\u003cp\u003eMost APIs marked as \u003ca href=\"https://redirect.github.com/pytorch/audio/issues/3902#issue-3017467084\"\u003edrop\u003c/a\u003e are now removed.\u003c/p\u003e\n\u003ch3\u003eMigration of \u003ccode\u003eload()\u003c/code\u003e and \u003ccode\u003esave()\u003c/code\u003e to TorchCodec\u003c/h3\u003e\n\u003cp\u003eWe are consolidating the decoding and encoding capabilities of PyTorch in \u003ca href=\"https://github.com/pytorch/torchcodec\"\u003eTorchCodec\u003c/a\u003e. \u003ccode\u003etorchaudio.load()\u003c/code\u003e and \u003ccode\u003etorchaudio.save()\u003c/code\u003e still exist, but their underlying implementation now relies on TorchCodec.\u003c/p\u003e\n\u003ch3\u003eC++ and CUDA extension\u003c/h3\u003e\n\u003cp\u003eWe're still working towards preserving \u003ccode\u003eforced_align\u003c/code\u003e, \u003ccode\u003elfilter\u003c/code\u003e, \u003ccode\u003eoverdrive\u003c/code\u003e, \u003ccode\u003eRNNT\u003c/code\u003e, and \u003ccode\u003eCUCTC\u003c/code\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/pytorch/audio/commit/34c52a67e8941bbd8e6adaca0eb0b9eabec11d78\"\u003e\u003ccode\u003e34c52a6\u003c/code\u003e\u003c/a\u003e [Release 2.11] update test-infra refs and version (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4178\"\u003e#4178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/96200d42e795098ee5e3f0106bcf9c370cf126a1\"\u003e\u003ccode\u003e96200d4\u003c/code\u003e\u003c/a\u003e Retain init args as attributes in MelScale and InverseMelScale (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4126\"\u003e#4126\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/e284e58c83f69c95a7f4a8a7d402f6c27ef56f5d\"\u003e\u003ccode\u003ee284e58\u003c/code\u003e\u003c/a\u003e Remove pinning against torch version (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/e1232690308a6b5297fcd06e925899a9b64f7280\"\u003e\u003ccode\u003ee123269\u003c/code\u003e\u003c/a\u003e Fix building on GCC 14.2 (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/d17635fc326ffee0e67d3ac7f19d35995b0fce65\"\u003e\u003ccode\u003ed17635f\u003c/code\u003e\u003c/a\u003e Update version to 2.11 (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4167\"\u003e#4167\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/cc9f5150c4153b89b904dc25b538d50a879cb3b6\"\u003e\u003ccode\u003ecc9f515\u003c/code\u003e\u003c/a\u003e Fix CMUARCTIC text transcripts reader. (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4164\"\u003e#4164\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/ad992718fa61a621ef66ad858fa0c610a3384ed0\"\u003e\u003ccode\u003ead99271\u003c/code\u003e\u003c/a\u003e Fix unused-variable issues, mostly relating to AMD/HIP\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/0764cfdedb769e63f3ab8b90bc06541a6a2c0b73\"\u003e\u003ccode\u003e0764cfd\u003c/code\u003e\u003c/a\u003e Upgrade GitHub Actions for Node 24 compatibility (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/fbf1d75b2a2cc947b1ae23aed6ff229cce540856\"\u003e\u003ccode\u003efbf1d75\u003c/code\u003e\u003c/a\u003e [Python STABLE ABI] Port pybind11 extension modules to torch stable libraries...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/audio/commit/744912eee04c9ae5b336868b0ff02fced3843d0c\"\u003e\u003ccode\u003e744912e\u003c/code\u003e\u003c/a\u003e Update JIT checks for scripting and tracing (\u003ca href=\"https://redirect.github.com/pytorch/audio/issues/4160\"\u003e#4160\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytorch/audio/compare/v2.8.0...v2.11.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `torch` from 2.8.0 to 2.11.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytorch/pytorch/releases\"\u003etorch's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ePyTorch 2.11.0 Release Notes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#highlights\"\u003eHighlights\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#backwards-incompatible-changes\"\u003eBackwards Incompatible Changes\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#deprecations\"\u003eDeprecations\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#new-features\"\u003eNew Features\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#improvements\"\u003eImprovements\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#bug-fixes\"\u003eBug fixes\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#performance\"\u003ePerformance\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#documentation\"\u003eDocumentation\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#developers\"\u003eDevelopers\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/blob/HEAD/#security\"\u003eSecurity\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eHighlights\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eFor more details about these highlighted features, you can look at the \u003ca href=\"https://pytorch.org/blog/pytorch-2-11-release-blog/\"\u003erelease blogpost\u003c/a\u003e. Below are the full release notes for this release.\u003c/p\u003e\n\u003ch1\u003eBackwards Incompatible Changes\u003c/h1\u003e\n\u003ch2\u003eRelease Engineering\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/pytorch/pytorch/commit/70d99e998b4955e0049d13a98d77ae1b14db1f45\"\u003e\u003ccode\u003e70d99e9\u003c/code\u003e\u003c/a\u003e [release only] Increase timeout for rocm libtorch and manywheel builds (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/178006\"\u003e#178006\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/3e05c5a9ca8aacd0d137541876f8bf4cfca7e940\"\u003e\u003ccode\u003e3e05c5a\u003c/code\u003e\u003c/a\u003e [MPS] Properly handle conjugated tensors in bmm (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/178010\"\u003e#178010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/db741c72097871e384b22ee6fff1d6083adf23cc\"\u003e\u003ccode\u003edb741c7\u003c/code\u003e\u003c/a\u003e [MPS] fix compiling of SDPA producing nan results (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/178009\"\u003e#178009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/483b55d84c74b92b3c2c67be4b9b7c7359ec2bbc\"\u003e\u003ccode\u003e483b55d\u003c/code\u003e\u003c/a\u003e Update pytorch_sphinx_theme2 version to 0.4.6 (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/177616\"\u003e#177616\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/7f2cdeb75b76bf07bb73776444bbb94456adbfa0\"\u003e\u003ccode\u003e7f2cdeb\u003c/code\u003e\u003c/a\u003e [windows][smoke test] Add an option to install cuda if required cuda/cudnn on...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/76fd07897dd9126df160e9723d97511b79888087\"\u003e\u003ccode\u003e76fd078\u003c/code\u003e\u003c/a\u003e [release-only] Fix libtorch builds. Fix lint (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/177299\"\u003e#177299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/fa384de31efe6548e694758d47ff295f2c2edb57\"\u003e\u003ccode\u003efa384de\u003c/code\u003e\u003c/a\u003e [Inductor][MPS] Fix half-precision type mismatches in Metal shader codegen (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/036b25f5a29dc58cbc62e7b976efb860ff128c3f\"\u003e\u003ccode\u003e036b25f\u003c/code\u003e\u003c/a\u003e Let stable::from_blob accept a lambda as deleter (cherry-pick) (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/176440\"\u003e#176440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/41f8e3e0381395e1669ca4bc6e36a7872d25cdcd\"\u003e\u003ccode\u003e41f8e3e\u003c/code\u003e\u003c/a\u003e [CI] Stop using G3 runners (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/177161\"\u003e#177161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytorch/pytorch/commit/e2fa2953033020ad7e0f823ec534044fac15a3c7\"\u003e\u003ccode\u003ee2fa295\u003c/code\u003e\u003c/a\u003e [CD] Unpin cuda-bindings dependencies (\u003ca href=\"https://redirect.github.com/pytorch/pytorch/issues/177159\"\u003e#177159\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytorch/pytorch/compare/v2.8.0...v2.11.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.0.0 to 12.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/...\n\n_Description has been truncated_","html_url":"https://github.com/bpwhelan/GameSentenceMiner/pull/463","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/bpwhelan%2FGameSentenceMiner/issues/463","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/463/packages"}},{"old_version":"7.4.2","new_version":"7.4.3","update_type":"patch","path":null,"pr_created_at":"2026-05-19T10:45:11.000Z","version_change":"7.4.2 → 7.4.3","issue":{"uuid":"4476682648","node_id":"PR_kwDOR0tLLM7dB9Hg","number":59,"state":"open","title":"chore(deps): bump the python-non-major group across 1 directory with 28 updates","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-19T10:45:11.000Z","updated_at":"2026-05-19T10:51:34.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-non-major","update_count":28,"packages":[{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"requests","old_version":"2.32.5","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"lxml","old_version":"6.0.4","new_version":"6.1.1","repository_url":"https://github.com/lxml/lxml"},{"name":"ruff","old_version":"0.14.8","new_version":"0.15.13","repository_url":"https://github.com/astral-sh/ruff"},{"name":"datamodel-code-generator","old_version":"0.45.0","new_version":"0.57.0","repository_url":"https://github.com/koxudaxi/datamodel-code-generator"},{"name":"pytest","old_version":"9.0.2","new_version":"9.0.3","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"presidio-analyzer","old_version":"2.2.361","new_version":"2.2.362","repository_url":"https://github.com/Microsoft/presidio"},{"name":"spacy","old_version":"3.8.11","new_version":"3.8.14","repository_url":"https://github.com/explosion/spaCy"},{"name":"torch","old_version":"2.10.0","new_version":"2.12.0","repository_url":"https://github.com/pytorch/pytorch"},{"name":"onnxruntime","old_version":"1.24.2","new_version":"1.26.0","repository_url":"https://github.com/microsoft/onnxruntime"},{"name":"pillow","old_version":"12.1.1","new_version":"12.2.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"datasketch","old_version":"1.9.0","new_version":"1.10.0","repository_url":"https://github.com/ekzhu/datasketch"},{"name":"sentence-transformers","old_version":"5.2.3","new_version":"5.5.0","repository_url":"https://github.com/huggingface/sentence-transformers"},{"name":"datasets","old_version":"4.6.0","new_version":"4.8.5","repository_url":"https://github.com/huggingface/datasets"},{"name":"gliner2","old_version":"1.3.0","new_version":"1.3.1","repository_url":"https://github.com/fastino-ai/GLiNER2"},{"name":"chardet","old_version":"7.4.2","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"docling","old_version":"2.93.0","new_version":"2.94.0","repository_url":"https://github.com/docling-project/docling"},{"name":"psycopg2-binary","old_version":"2.9.11","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"pymysql","old_version":"1.1.2","new_version":"1.2.0","repository_url":"https://github.com/PyMySQL/PyMySQL"},{"name":"databricks-sql-connector","old_version":"4.2.5","new_version":"4.2.6","repository_url":"https://github.com/databricks/databricks-sql-python"},{"name":"snowflake-connector-python","old_version":"4.3.0","new_version":"4.5.0","repository_url":"https://github.com/snowflakedb/snowflake-connector-python"},{"name":"pymongo","old_version":"4.16.0","new_version":"4.17.0","repository_url":"https://github.com/mongodb/mongo-python-driver"},{"name":"boto3","old_version":"1.42.56","new_version":"1.43.10","repository_url":"https://github.com/boto/boto3"},{"name":"azure-storage-blob","old_version":"12.28.0","new_version":"12.29.0","repository_url":"https://github.com/Azure/azure-sdk-for-python"},{"name":"azure-identity","old_version":"1.25.2","new_version":"1.25.3","repository_url":"https://github.com/Azure/azure-sdk-for-python"},{"name":"google-cloud-storage","old_version":"3.9.0","new_version":"3.10.1","repository_url":"https://github.com/googleapis/python-storage"},{"name":"opentelemetry-sdk","old_version":"1.41.0","new_version":"1.42.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-non-major group with 27 updates in the /apps/cli directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.13.4` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.34.2` |\n| [lxml](https://github.com/lxml/lxml) | `6.0.4` | `6.1.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.14.8` | `0.15.13` |\n| [datamodel-code-generator](https://github.com/koxudaxi/datamodel-code-generator) | `0.45.0` | `0.57.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.2` | `9.0.3` |\n| [presidio-analyzer](https://github.com/Microsoft/presidio) | `2.2.361` | `2.2.362` |\n| [spacy](https://github.com/explosion/spaCy) | `3.8.11` | `3.8.14` |\n| [torch](https://github.com/pytorch/pytorch) | `2.10.0` | `2.12.0` |\n| [onnxruntime](https://github.com/microsoft/onnxruntime) | `1.24.2` | `1.26.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.1.1` | `12.2.0` |\n| [datasketch](https://github.com/ekzhu/datasketch) | `1.9.0` | `1.10.0` |\n| [sentence-transformers](https://github.com/huggingface/sentence-transformers) | `5.2.3` | `5.5.0` |\n| [datasets](https://github.com/huggingface/datasets) | `4.6.0` | `4.8.5` |\n| [gliner2](https://github.com/fastino-ai/GLiNER2) | `1.3.0` | `1.3.1` |\n| [chardet](https://github.com/chardet/chardet) | `7.4.2` | `7.4.3` |\n| [docling](https://github.com/docling-project/docling) | `2.93.0` | `2.94.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [pymysql](https://github.com/PyMySQL/PyMySQL) | `1.1.2` | `1.2.0` |\n| [databricks-sql-connector](https://github.com/databricks/databricks-sql-python) | `4.2.5` | `4.2.6` |\n| [snowflake-connector-python](https://github.com/snowflakedb/snowflake-connector-python) | `4.3.0` | `4.5.0` |\n| [pymongo](https://github.com/mongodb/mongo-python-driver) | `4.16.0` | `4.17.0` |\n| [boto3](https://github.com/boto/boto3) | `1.42.56` | `1.43.10` |\n| [azure-storage-blob](https://github.com/Azure/azure-sdk-for-python) | `12.28.0` | `12.29.0` |\n| [azure-identity](https://github.com/Azure/azure-sdk-for-python) | `1.25.2` | `1.25.3` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.9.0` | `3.10.1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.41.0` | `1.42.0` |\n\n\nUpdates `pydantic` from 2.12.5 to 2.13.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.0 2026-04-13\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.4/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.1\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/cf67d4b3193c3fe43ede18612ed62785eee11382\"\u003e\u003ccode\u003ecf67d4b\u003c/code\u003e\u003c/a\u003e Fix linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/f0d8a214a5803036db46a56b1f62f1e56b81d662\"\u003e\u003ccode\u003ef0d8a21\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/5e3fe1d41a00f441204241c66078003ae0391f9a\"\u003e\u003ccode\u003e5e3fe1d\u003c/code\u003e\u003c/a\u003e Check for pydantic tag pattern in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7f9edcc2a191d2eaa9751220eb910914e716a686\"\u003e\u003ccode\u003e7f9edcc\u003c/code\u003e\u003c/a\u003e Document tagging conventions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b46a0c9b8a4dd967fda8ec1a92f6437076bf262c\"\u003e\u003ccode\u003eb46a0c9\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/50629c851e61d887d5420452c311ec6203f1f400\"\u003e\u003ccode\u003e50629c8\u003c/code\u003e\u003c/a\u003e Update to PyPy 7.3.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/8522ebb71e5e9a6f7188af5f009f01785b8cf725\"\u003e\u003ccode\u003e8522ebb\u003c/code\u003e\u003c/a\u003e Preserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a37f3aff090ca342dc5f48304889963530b993f8\"\u003e\u003ccode\u003ea37f3af\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003eMISSING\u003c/code\u003e sentinel test to work with unreleased \u003ccode\u003etyping_extensions\u003c/code\u003e ver...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/909259a9df660518033aa686b689f045a6eaf9d2\"\u003e\u003ccode\u003e909259a\u003c/code\u003e\u003c/a\u003e Remove Logfire example in documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2c4174c366606fc2dc46cb806833a080aefa77df\"\u003e\u003ccode\u003e2c4174c\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.155 to 0.2.185\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.5...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.32.5 to 2.34.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `lxml` from 6.0.4 to 6.1.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/lxml/lxml/blob/master/CHANGES.txt\"\u003elxml's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e6.1.1 (2026-05-18)\u003c/h1\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe known link attributes in \u003ccode\u003elxml.html.defs.link_attrs\u003c/code\u003e were missing \u003ccode\u003exlink:href\u003c/code\u003e,\nwhich can be used for URL bypass attacks in embedded SVG/MathML/etc. content.\n\u003ca href=\"https://github.com/fedora-python/lxml_html_clean/security/advisories/GHSA-4jhm-jv67-739f\"\u003ehttps://github.com/fedora-python/lxml_html_clean/security/advisories/GHSA-4jhm-jv67-739f\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe Linux wheels use a patched libxslt 1.1.43, fixing CVE-2025-7424 and CVE-2025-11731.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe Windows wheels use libxslt 1.1.45, fixing CVE-2025-7424 and CVE-2025-11731.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e6.1.0 (2026-04-17)\u003c/h1\u003e\n\u003cp\u003eThis release fixes a possible external entity injection (XXE) vulnerability in\n\u003ccode\u003eiterparse()\u003c/code\u003e and the \u003ccode\u003eETCompatXMLParser\u003c/code\u003e.\u003c/p\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eGH#486: The HTML ARIA accessibility attributes were added to the set of safe attributes\nin \u003ccode\u003elxml.html.defs\u003c/code\u003e.  This allows \u003ccode\u003elxml_html_clean\u003c/code\u003e to pass them through.\nPatch by oomsveta.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe default chunk size for reading from file-likes in \u003ccode\u003eiterparse()\u003c/code\u003e is now configurable\nwith a new \u003ccode\u003echunk_size\u003c/code\u003e argument.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eLP#2146291: The \u003ccode\u003eresolve_entities\u003c/code\u003e option was still set to \u003ccode\u003eTrue\u003c/code\u003e for\n\u003ccode\u003eiterparse\u003c/code\u003e and \u003ccode\u003eETCompatXMLParser\u003c/code\u003e, allowing for external entity injection (XXE)\nwhen using these parsers without setting this option explicitly.\nThe default was now changed to \u003ccode\u003e'internal'\u003c/code\u003e only (as for the normal XML and HTML parsers\nsince lxml 5.0).\nIssue found by Sihao Qiu as CVE-2026-41066.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/b4a4c595fb875d6f50ae113449834209a364643a\"\u003e\u003ccode\u003eb4a4c59\u003c/code\u003e\u003c/a\u003e Build: Fix build in Py3.8.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/a116dcbe671a792dd65bc73f53a8209e7d7c25ff\"\u003e\u003ccode\u003ea116dcb\u003c/code\u003e\u003c/a\u003e Fix typo: type annotions -\u0026gt; type annotations in PEP 560 comments (\u003ca href=\"https://redirect.github.com/lxml/lxml/issues/504\"\u003eGH-504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/7287a75eedc4cdc247a7937d09013e936c34ace6\"\u003e\u003ccode\u003e7287a75\u003c/code\u003e\u003c/a\u003e Prepare release of 6.1.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/5927a6d5e851845140975d99b65461e255caaab0\"\u003e\u003ccode\u003e5927a6d\u003c/code\u003e\u003c/a\u003e Add missing \u0026quot;xlink:href\u0026quot; to the known HTML link attributes.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/23efeb4910e43e9545b754ce1f138d91ed5cc25c\"\u003e\u003ccode\u003e23efeb4\u003c/code\u003e\u003c/a\u003e Build: Fix build in Py3.8.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/2c0563b3e8c272e62667c7850612347f65d2952e\"\u003e\u003ccode\u003e2c0563b\u003c/code\u003e\u003c/a\u003e Build: Add bug patch for libxslt 1.1.43 and apply it during the static librar...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/8a35fcc3ed53975c762867c3ac8ae318c7960be7\"\u003e\u003ccode\u003e8a35fcc\u003c/code\u003e\u003c/a\u003e Fix doctest in PyPy3.9.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/43722f4402afa48b7890a96ce012eb0b9b1af5be\"\u003e\u003ccode\u003e43722f4\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/87470409b17188a5a7dbefcfa124af9cd792ffaa\"\u003e\u003ccode\u003e8747040\u003c/code\u003e\u003c/a\u003e Name version of option change in docstring.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/6c36e6cef77db5087a1fff1a0d1ca8fed963afe7\"\u003e\u003ccode\u003e6c36e6c\u003c/code\u003e\u003c/a\u003e Fix pypistats URL in download statistics script.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/lxml/lxml/compare/lxml-6.0.4...lxml-6.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.14.8 to 0.15.13\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.13\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-14.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a rule to flag lazy imports that are eagerly evaluated (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25016\"\u003e#25016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Standardize diagnostic message (\u003ccode\u003ePLR0914\u003c/code\u003e, \u003ccode\u003ePLR0917\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24996\"\u003e#24996\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eF811\u003c/code\u003e false positive for class methods (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24933\"\u003e#24933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix setting selection for multi-folder workspace (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24819\"\u003e#24819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eeradicate\u003c/code\u003e] Fix false positive for lines with leading whitespace (\u003ccode\u003eERA001\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25122\"\u003e#25122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive for f-string debug specifier (\u003ccode\u003ePYI016\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24098\"\u003e#24098\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlways include panic payload in panic diagnostic message (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24873\"\u003e#24873\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict \u003ccode\u003ePYI034\u003c/code\u003e for in-place operations to enclosing class (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24511\"\u003e#24511\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove error message for parameters that are declared \u003ccode\u003eglobal\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24902\"\u003e#24902\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate known stdlib (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25103\"\u003e#25103\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eisort\u003c/code\u003e] Avoid constructing \u003ccode\u003eglob::Pattern\u003c/code\u003es for literal known modules (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25123\"\u003e#25123\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd TOML examples to \u003ccode\u003e--config\u003c/code\u003e help text (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25013\"\u003e#25013\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eColorize ruff check 'All checks passed' (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25085\"\u003e#25085\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eConfiguration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIncrease max allowed value of \u003ccode\u003eline-length\u003c/code\u003e setting (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24962\"\u003e#24962\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eD203\u003c/code\u003e to rules that conflict with the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25044\"\u003e#25044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eClarify \u003ccode\u003eCOM819\u003c/code\u003e and formatter interaction (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25045\"\u003e#25045\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eClarify that \u003ccode\u003eNotImplemented\u003c/code\u003e is a value, not an exception (\u003ccode\u003eF901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25054\"\u003e#25054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate number of lint rules supported (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24942\"\u003e#24942\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify the playground's markdown template (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24924\"\u003e#24924\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.13\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-14.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a rule to flag lazy imports that are eagerly evaluated (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25016\"\u003e#25016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Standardize diagnostic message (\u003ccode\u003ePLR0914\u003c/code\u003e, \u003ccode\u003ePLR0917\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24996\"\u003e#24996\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eF811\u003c/code\u003e false positive for class methods (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24933\"\u003e#24933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix setting selection for multi-folder workspace (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24819\"\u003e#24819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eeradicate\u003c/code\u003e] Fix false positive for lines with leading whitespace (\u003ccode\u003eERA001\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25122\"\u003e#25122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive for f-string debug specifier (\u003ccode\u003ePYI016\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24098\"\u003e#24098\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlways include panic payload in panic diagnostic message (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24873\"\u003e#24873\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict \u003ccode\u003ePYI034\u003c/code\u003e for in-place operations to enclosing class (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24511\"\u003e#24511\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove error message for parameters that are declared \u003ccode\u003eglobal\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24902\"\u003e#24902\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate known stdlib (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25103\"\u003e#25103\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eisort\u003c/code\u003e] Avoid constructing \u003ccode\u003eglob::Pattern\u003c/code\u003es for literal known modules (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25123\"\u003e#25123\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd TOML examples to \u003ccode\u003e--config\u003c/code\u003e help text (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25013\"\u003e#25013\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eColorize ruff check 'All checks passed' (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25085\"\u003e#25085\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eConfiguration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIncrease max allowed value of \u003ccode\u003eline-length\u003c/code\u003e setting (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24962\"\u003e#24962\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eD203\u003c/code\u003e to rules that conflict with the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25044\"\u003e#25044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eClarify \u003ccode\u003eCOM819\u003c/code\u003e and formatter interaction (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25045\"\u003e#25045\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eClarify that \u003ccode\u003eNotImplemented\u003c/code\u003e is a value, not an exception (\u003ccode\u003eF901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25054\"\u003e#25054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate number of lint rules supported (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24942\"\u003e#24942\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify the playground's markdown template (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24924\"\u003e#24924\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/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/2afb467ce397e4a89c13a0a814c62cfecb0e9e49\"\u003e\u003ccode\u003e2afb467\u003c/code\u003e\u003c/a\u003e Bump 0.15.13 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25157\"\u003e#25157\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/300879600fa3af7cde1e675c63de6ad9d0797d1b\"\u003e\u003ccode\u003e3008796\u003c/code\u003e\u003c/a\u003e [ty] classify TypeVar semantic tokens as type parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24891\"\u003e#24891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/79470e31877acb6074f3bbff2a49e508822ae4e8\"\u003e\u003ccode\u003e79470e3\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eisort\u003c/code\u003e] Avoid constructing \u003ccode\u003eglob::Pattern\u003c/code\u003es for literal known modules (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25123\"\u003e#25123\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/2522549901d50f18775999f0fb802b19229417f0\"\u003e\u003ccode\u003e2522549\u003c/code\u003e\u003c/a\u003e Remove shellcheck from prek (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25154\"\u003e#25154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7db7170020f539d6d2bc01dbd0b0c09fab91dc06\"\u003e\u003ccode\u003e7db7170\u003c/code\u003e\u003c/a\u003e [ty] Support TypedDict key completions in incomplete, anonymous contexts (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25\"\u003e#25\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/bb3dd535f1c5a83e2e56ac93a771fadbeeceebd0\"\u003e\u003ccode\u003ebb3dd53\u003c/code\u003e\u003c/a\u003e [ty] Run full iteration analysis on narrowed typevars (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25143\"\u003e#25143\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/828cdb7732efcb16a53f4ee5f011cf653b834d1a\"\u003e\u003ccode\u003e828cdb7\u003c/code\u003e\u003c/a\u003e [ty] Isolate file-watching test environment (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25151\"\u003e#25151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/89e1d8670ea4d3af60c8143ee552dc750200718d\"\u003e\u003ccode\u003e89e1d86\u003c/code\u003e\u003c/a\u003e [ty] Preserve TypedDict keys through dict unpacking (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24523\"\u003e#24523\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/86f3064d6fffa5697d174f26b840bd6857b381da\"\u003e\u003ccode\u003e86f3064\u003c/code\u003e\u003c/a\u003e [ty] Avoid accessing \u003ccode\u003eargs[0]\u003c/code\u003e for \u003ccode\u003estatic_assert\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25149\"\u003e#25149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ed819f947dc27e36eac8bb3134153c4668d76a3a\"\u003e\u003ccode\u003eed819f9\u003c/code\u003e\u003c/a\u003e [ty] Treat custom enum \u003ccode\u003e__new__\u003c/code\u003e values as dynamic (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25136\"\u003e#25136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.14.8...0.15.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `datamodel-code-generator` from 0.45.0 to 0.57.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/releases\"\u003edatamodel-code-generator's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.57.0\u003c/h2\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eCode Generation Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--use-default\u003c/code\u003e no longer makes required fields nullable - Previously, \u003ccode\u003e--use-default\u003c/code\u003e turned required fields into optional nullable fields (e.g., \u003ccode\u003estatus: str | None = 'active'\u003c/code\u003e). Now required fields keep their original non-nullable type and just get the default value rendered (e.g., \u003ccode\u003estatus: str = 'active'\u003c/code\u003e). Users whose downstream code depends on these fields being \u003ccode\u003eOptional\u003c/code\u003e/nullable will need to update. (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3054\"\u003e#3054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequired model-ref fields no longer render defaults without \u003ccode\u003e--use-default\u003c/code\u003e - Previously, required fields referencing models (e.g., \u003ccode\u003eshipping_address: Address\u003c/code\u003e) inconsistently rendered defaults with \u003ccode\u003evalidate_default=True\u003c/code\u003e while scalar required fields did not. Now all required fields consistently omit defaults unless \u003ccode\u003e--use-default\u003c/code\u003e is passed. Users who relied on the previous behavior where model-ref required fields had defaults rendered will see those defaults removed. (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3054\"\u003e#3054\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCustom Template Update Required\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBuilt-in Jinja2 templates now use \u003ccode\u003efield.use_default_with_required\u003c/code\u003e - The built-in templates for \u003ccode\u003eBaseModel\u003c/code\u003e, \u003ccode\u003edataclass\u003c/code\u003e, \u003ccode\u003epydantic_v2/dataclass\u003c/code\u003e, and \u003ccode\u003emsgspec\u003c/code\u003e were updated to check \u003ccode\u003efield.use_default_with_required\u003c/code\u003e alongside \u003ccode\u003efield.required\u003c/code\u003e when deciding whether to render defaults. Custom templates that replicate the old default-rendering logic (e.g., \u003ccode\u003e{%- if not field.required %}\u003c/code\u003e) will still work but won't support the new \u003ccode\u003e--use-default\u003c/code\u003e behavior for required fields. To get the updated behavior, custom templates should change conditions like \u003ccode\u003enot field.required\u003c/code\u003e to \u003ccode\u003e(not field.required or field.use_default_with_required)\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3054\"\u003e#3054\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden workflow credentials by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3095\"\u003ekoxudaxi/datamodel-code-generator#3095\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix release automation workflows by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3110\"\u003ekoxudaxi/datamodel-code-generator#3110\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce shared assertions in e2e tests by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3108\"\u003ekoxudaxi/datamodel-code-generator#3108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix docs preview required check by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3112\"\u003ekoxudaxi/datamodel-code-generator#3112\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix required field default rendering and --use-default nullable types by \u003ca href=\"https://github.com/butvinm\"\u003e\u003ccode\u003e@​butvinm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3054\"\u003ekoxudaxi/datamodel-code-generator#3054\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove unused CLI doc schema version lookup by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3113\"\u003ekoxudaxi/datamodel-code-generator#3113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix byte to binary type mapping by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3114\"\u003ekoxudaxi/datamodel-code-generator#3114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCreate generated docs sync PRs by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3117\"\u003ekoxudaxi/datamodel-code-generator#3117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport local HTTP ref paths by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3116\"\u003ekoxudaxi/datamodel-code-generator#3116\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix reuse discriminator literals by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3115\"\u003ekoxudaxi/datamodel-code-generator#3115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocstrings that can be single line to be formatted on a single line by \u003ca href=\"https://github.com/kevin-paulson-mindbridge-ai\"\u003e\u003ccode\u003e@​kevin-paulson-mindbridge-ai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3107\"\u003ekoxudaxi/datamodel-code-generator#3107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix indefinite hang on OpenAPI schemas with cyclic model dependencies by \u003ca href=\"https://github.com/kevin-paulson-mindbridge-ai\"\u003e\u003ccode\u003e@​kevin-paulson-mindbridge-ai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3078\"\u003ekoxudaxi/datamodel-code-generator#3078\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd OpenAPI enum literal alias regression test by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3124\"\u003ekoxudaxi/datamodel-code-generator#3124\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pydantic model extra warnings by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3127\"\u003ekoxudaxi/datamodel-code-generator#3127\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix snake case array discriminator by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3125\"\u003ekoxudaxi/datamodel-code-generator#3125\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix serialization alias choices by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3126\"\u003ekoxudaxi/datamodel-code-generator#3126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix generated docs sync prompt snapshots by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3129\"\u003ekoxudaxi/datamodel-code-generator#3129\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd manual generated docs sync trigger by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3130\"\u003ekoxudaxi/datamodel-code-generator#3130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse source tree for generated prompt snapshots by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3132\"\u003ekoxudaxi/datamodel-code-generator#3132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate enum member descriptions for anyOf const pattern by \u003ca href=\"https://github.com/mvanhorn\"\u003e\u003ccode\u003e@​mvanhorn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3133\"\u003ekoxudaxi/datamodel-code-generator#3133\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- 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/koxudaxi/datamodel-code-generator/blob/main/CHANGELOG.md\"\u003edatamodel-code-generator's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/releases/tag/0.57.0\"\u003e0.57.0\u003c/a\u003e - 2026-05-07\u003c/h2\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eCode Generation Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--use-default\u003c/code\u003e no longer makes required fields nullable - Previously, \u003ccode\u003e--use-default\u003c/code\u003e turned required fields into optional nullable fields (e.g., \u003ccode\u003estatus: str | None = 'active'\u003c/code\u003e). Now required fields keep their original non-nullable type and just get the default value rendered (e.g., \u003ccode\u003estatus: str = 'active'\u003c/code\u003e). Users whose downstream code depends on these fields being \u003ccode\u003eOptional\u003c/code\u003e/nullable will need to update. (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3054\"\u003e#3054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequired model-ref fields no longer render defaults without \u003ccode\u003e--use-default\u003c/code\u003e - Previously, required fields referencing models (e.g., \u003ccode\u003eshipping_address: Address\u003c/code\u003e) inconsistently rendered defaults with \u003ccode\u003evalidate_default=True\u003c/code\u003e while scalar required fields did not. Now all required fields consistently omit defaults unless \u003ccode\u003e--use-default\u003c/code\u003e is passed. Users who relied on the previous behavior where model-ref required fields had defaults rendered will see those defaults removed. (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3054\"\u003e#3054\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCustom Template Update Required\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBuilt-in Jinja2 templates now use \u003ccode\u003efield.use_default_with_required\u003c/code\u003e - The built-in templates for \u003ccode\u003eBaseModel\u003c/code\u003e, \u003ccode\u003edataclass\u003c/code\u003e, \u003ccode\u003epydantic_v2/dataclass\u003c/code\u003e, and \u003ccode\u003emsgspec\u003c/code\u003e were updated to check \u003ccode\u003efield.use_default_with_required\u003c/code\u003e alongside \u003ccode\u003efield.required\u003c/code\u003e when deciding whether to render defaults. Custom templates that replicate the old default-rendering logic (e.g., \u003ccode\u003e{%- if not field.required %}\u003c/code\u003e) will still work but won't support the new \u003ccode\u003e--use-default\u003c/code\u003e behavior for required fields. To get the updated behavior, custom templates should change conditions like \u003ccode\u003enot field.required\u003c/code\u003e to \u003ccode\u003e(not field.required or field.use_default_with_required)\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3054\"\u003e#3054\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden workflow credentials by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3095\"\u003ekoxudaxi/datamodel-code-generator#3095\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix release automation workflows by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3110\"\u003ekoxudaxi/datamodel-code-generator#3110\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce shared assertions in e2e tests by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3108\"\u003ekoxudaxi/datamodel-code-generator#3108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix docs preview required check by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3112\"\u003ekoxudaxi/datamodel-code-generator#3112\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix required field default rendering and --use-default nullable types by \u003ca href=\"https://github.com/butvinm\"\u003e\u003ccode\u003e@​butvinm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3054\"\u003ekoxudaxi/datamodel-code-generator#3054\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove unused CLI doc schema version lookup by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3113\"\u003ekoxudaxi/datamodel-code-generator#3113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix byte to binary type mapping by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3114\"\u003ekoxudaxi/datamodel-code-generator#3114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCreate generated docs sync PRs by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3117\"\u003ekoxudaxi/datamodel-code-generator#3117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport local HTTP ref paths by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3116\"\u003ekoxudaxi/datamodel-code-generator#3116\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix reuse discriminator literals by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3115\"\u003ekoxudaxi/datamodel-code-generator#3115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocstrings that can be single line to be formatted on a single line by \u003ca href=\"https://github.com/kevin-paulson-mindbridge-ai\"\u003e\u003ccode\u003e@​kevin-paulson-mindbridge-ai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3107\"\u003ekoxudaxi/datamodel-code-generator#3107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix indefinite hang on OpenAPI schemas with cyclic model dependencies by \u003ca href=\"https://github.com/kevin-paulson-mindbridge-ai\"\u003e\u003ccode\u003e@​kevin-paulson-mindbridge-ai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3078\"\u003ekoxudaxi/datamodel-code-generator#3078\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd OpenAPI enum literal alias regression test by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3124\"\u003ekoxudaxi/datamodel-code-generator#3124\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pydantic model extra warnings by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3127\"\u003ekoxudaxi/datamodel-code-generator#3127\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix snake case array discriminator by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3125\"\u003ekoxudaxi/datamodel-code-generator#3125\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix serialization alias choices by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3126\"\u003ekoxudaxi/datamodel-code-generator#3126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix generated docs sync prompt snapshots by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3129\"\u003ekoxudaxi/datamodel-code-generator#3129\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd manual generated docs sync trigger by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3130\"\u003ekoxudaxi/datamodel-code-generator#3130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse source tree for generated prompt snapshots by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3132\"\u003ekoxudaxi/datamodel-code-generator#3132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate enum member descriptions for anyOf const pattern by \u003ca href=\"https://github.com/mvanhorn\"\u003e\u003ccode\u003e@​mvanhorn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3133\"\u003ekoxudaxi/datamodel-code-generator#3133\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow generated prompt snapshot updates by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3134\"\u003ekoxudaxi/datamodel-code-generator#3134\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWrite generated prompt snapshots directly by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3135\"\u003ekoxudaxi/datamodel-code-generator#3135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePreserve tox python preference for generated docs by \u003ca href=\"https://github.com/koxudaxi\"\u003e\u003ccode\u003e@​koxudaxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3136\"\u003ekoxudaxi/datamodel-code-generator#3136\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSync generated docs by \u003ca href=\"https://github.com/dcg-generated-docs\"\u003e\u003ccode\u003e@​dcg-generated-docs\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3137\"\u003ekoxudaxi/datamodel-code-generator#3137\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/mvanhorn\"\u003e\u003ccode\u003e@​mvanhorn\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3133\"\u003ekoxudaxi/datamodel-code-generator#3133\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dcg-generated-docs\"\u003e\u003ccode\u003e@​dcg-generated-docs\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3137\"\u003ekoxudaxi/datamodel-code-generator#3137\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/compare/0.56.1...0.57.0\"\u003ehttps://github.com/koxudaxi/datamodel-code-generator/compare/0.56.1...0.57.0\u003c/a\u003e\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/releases/tag/0.56.1\"\u003e0.56.1\u003c/a\u003e - 2026-04-16\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e--base-class-map\u003c/code\u003e and \u003ccode\u003e--enum-field-as-literal-map\u003c/code\u003e long inline json support by \u003ca href=\"https://github.com/ilovelinux\"\u003e\u003ccode\u003e@​ilovelinux\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/pull/3075\"\u003ekoxudaxi/datamodel-code-generator#3075\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/d0aa6ab9912603a5e8b7c78ff62a1893078542d4\"\u003e\u003ccode\u003ed0aa6ab\u003c/code\u003e\u003c/a\u003e docs: sync generated docs (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/7bd643f3dacdd9f09093bc06a61b0eef49319451\"\u003e\u003ccode\u003e7bd643f\u003c/code\u003e\u003c/a\u003e Preserve tox python preference for generated docs (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3136\"\u003e#3136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/64f218a5711dfde954e50eb6b50c47b254fd35b4\"\u003e\u003ccode\u003e64f218a\u003c/code\u003e\u003c/a\u003e Write generated prompt snapshots directly (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3135\"\u003e#3135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/a7d1e9c47a8603ffd7668264a4e8fe02553d0f90\"\u003e\u003ccode\u003ea7d1e9c\u003c/code\u003e\u003c/a\u003e Allow generated prompt snapshot updates (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3134\"\u003e#3134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/9210c193922c52949e288e8f68e195d56acd34b4\"\u003e\u003ccode\u003e9210c19\u003c/code\u003e\u003c/a\u003e Propagate enum member descriptions for anyOf const pattern (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3133\"\u003e#3133\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/928ba552f4190f0b4c2390d135dcbbb6048ddfc3\"\u003e\u003ccode\u003e928ba55\u003c/code\u003e\u003c/a\u003e Use source tree for generated prompt snapshots (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3132\"\u003e#3132\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/b59971413184e9151882cb0b5906acbf3b3f4df8\"\u003e\u003ccode\u003eb599714\u003c/code\u003e\u003c/a\u003e Add manual generated docs sync trigger (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3130\"\u003e#3130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/93f2bce292f82fde15fe7ad8d4e0eeb2c7fdbb12\"\u003e\u003ccode\u003e93f2bce\u003c/code\u003e\u003c/a\u003e Fix generated docs sync prompt snapshots (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3129\"\u003e#3129\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/919f191f896af8bf62d7aafe9e19a98cf9a05efc\"\u003e\u003ccode\u003e919f191\u003c/code\u003e\u003c/a\u003e Fix serialization alias choices (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3126\"\u003e#3126\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/commit/90b0729b303be4246e4ce9babf825d0e4170b9f7\"\u003e\u003ccode\u003e90b0729\u003c/code\u003e\u003c/a\u003e Fix snake case array discriminator (\u003ca href=\"https://redirect.github.com/koxudaxi/datamodel-code-generator/issues/3125\"\u003e#3125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/koxudaxi/datamodel-code-generator/compare/0.45.0...0.57.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 9.0.2 to 9.0.3\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.0.3\u003c/h2\u003e\n\u003ch1\u003epytest 9.0.3 (2026-04-07)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12444\"\u003e#12444\u003c/a\u003e: Fixed \u003ccode\u003epytest.approx\u003c/code\u003e which now correctly takes into account \u003ccode\u003e~collections.abc.Mapping\u003c/code\u003e keys order to compare them.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13634\"\u003e#13634\u003c/a\u003e: Blocking a \u003ccode\u003econftest.py\u003c/code\u003e file using the \u003ccode\u003e-p no:\u003c/code\u003e option is now explicitly disallowed.\u003c/p\u003e\n\u003cp\u003ePreviously this resulted in an internal assertion failure during plugin loading.\u003c/p\u003e\n\u003cp\u003ePytest now raises a clear \u003ccode\u003eUsageError\u003c/code\u003e explaining that conftest files are not plugins and cannot be disabled via \u003ccode\u003e-p\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/13734\"\u003e#13734\u003c/a\u003e: Fixed crash when a test raises an exceptiongroup with \u003ccode\u003e__tracebackhide__ = True\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/14195\"\u003e#14195\u003c/a\u003e: Fixed an issue where non-string messages passed to \u003c!-- raw HTML omitted --\u003eunittest.TestCase.subTest()\u003c!-- raw HTML omitted --\u003e were not printed.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14343\"\u003e#14343\u003c/a\u003e: Fixed use of insecure temporary directory (CVE-2025-71176).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13388\"\u003e#13388\u003c/a\u003e: Clarified documentation for \u003ccode\u003e-p\u003c/code\u003e vs \u003ccode\u003ePYTEST_PLUGINS\u003c/code\u003e plugin loading and fixed an incorrect \u003ccode\u003e-p\u003c/code\u003e example.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13731\"\u003e#13731\u003c/a\u003e: Clarified that capture fixtures (e.g. \u003ccode\u003ecapsys\u003c/code\u003e and \u003ccode\u003ecapfd\u003c/code\u003e) take precedence over the \u003ccode\u003e-s\u003c/code\u003e / \u003ccode\u003e--capture=no\u003c/code\u003e command-line options in \u003ccode\u003eAccessing captured output from a test function \u0026lt;accessing-captured-output\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14088\"\u003e#14088\u003c/a\u003e: Clarified that the default \u003ccode\u003epytest_collection\u003c/code\u003e hook sets \u003ccode\u003esession.items\u003c/code\u003e before it calls \u003ccode\u003epytest_collection_finish\u003c/code\u003e, not after.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14255\"\u003e#14255\u003c/a\u003e: TOML integer log levels must be quoted: Updating reference documentation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12689\"\u003e#12689\u003c/a\u003e: The test reports are now published to Codecov from GitHub Actions.\nThe test statistics is visible \u003ca href=\"https://app.codecov.io/gh/pytest-dev/pytest/tests\"\u003eon the web interface\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e-- by \u003ccode\u003ealeguy02\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/a7d58d7a21b78581e636bbbdea13c66ad1657c1e\"\u003e\u003ccode\u003ea7d58d7\u003c/code\u003e\u003c/a\u003e Prepare release version 9.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/089d98199c253d8f89a040243bc4f2aa6cd5ab22\"\u003e\u003ccode\u003e089d981\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14366\"\u003e#14366\u003c/a\u003e from bluetech/revert-14193-backport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/8127eaf4ab7f6b2fdd0dc1b38343ec97aeef05ac\"\u003e\u003ccode\u003e8127eaf\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Fix: assertrepr_compare respects dict insertion order (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14050\"\u003e#14050\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14193\"\u003e#14193\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/99a7e6029e7a6e8d53e5df114b1346e035370241\"\u003e\u003ccode\u003e99a7e60\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14363\"\u003e#14363\u003c/a\u003e from pytest-dev/patchback/backports/9.0.x/95d8423bd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ddee02a578da30dd43aedc39c1c1f1aaadfcee95\"\u003e\u003ccode\u003eddee02a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14343\"\u003e#14343\u003c/a\u003e from bluetech/cve-2025-71176-simple\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/74eac6916fee34726cb194f16c516e96fbd29619\"\u003e\u003ccode\u003e74eac69\u003c/code\u003e\u003c/a\u003e doc: Update training info (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14298\"\u003e#14298\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14301\"\u003e#14301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f92dee777cfdb77d1c43633d02766ddf1f07c869\"\u003e\u003ccode\u003ef92dee7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14267\"\u003e#14267\u003c/a\u003e from pytest-dev/patchback/backports/9.0.x/d6fa26c62...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7ee58acc8777c31ac6cf388d01addf5a414a7439\"\u003e\u003ccode\u003e7ee58ac\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12378\"\u003e#12378\u003c/a\u003e from Pierre-Sassoulas/fix-implicit-str-concat-and-d...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/37da870d37e3a2f5177cae075c7b9ae279432bf8\"\u003e\u003ccode\u003e37da870\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14259\"\u003e#14259\u003c/a\u003e from mitre88/patch-4 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14268\"\u003e#14268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c34bfa3b7acb65b594707c714f1d8461b0304eed\"\u003e\u003ccode\u003ec34bfa3\u003c/code\u003e\u003c/a\u003e Add explanation for string context diffs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14257\"\u003e#14257\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14266\"\u003e#14266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.0.2...9.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `presidio-analyzer` from 2.2.361 to 2.2.362\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Microsoft/presidio/releases\"\u003epresidio-analyzer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 2.2.362\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFeature - GPU Device Control via Environment Variable by \u003ca href=\"https://github.com/RonShakutai\"\u003e\u003ccode\u003e@​RonShakutai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1844\"\u003emicrosoft/presidio#1844\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Add HuggingFaceNerRecognizer for direct NER model inference by \u003ca href=\"https://github.com/ultramancode\"\u003e\u003ccode\u003e@​ultramancode\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1834\"\u003emicrosoft/presidio#1834\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Broken Links by \u003ca href=\"https://github.com/andyjessen\"\u003e\u003ccode\u003e@​andyjessen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1856\"\u003emicrosoft/presidio#1856\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePin dependencies to mitigate supply chain attacks by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1861\"\u003emicrosoft/presidio#1861\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixing CVE-2024-47874 and CVE-2025-54121 by \u003ca href=\"https://github.com/SharonHart\"\u003e\u003ccode\u003e@​SharonHart\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1860\"\u003emicrosoft/presidio#1860\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixing CVE-2025-2953 and CVE-2025-3730 by \u003ca href=\"https://github.com/SharonHart\"\u003e\u003ccode\u003e@​SharonHart\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1859\"\u003emicrosoft/presidio#1859\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: Fixed context enhancement substring matching bug  by \u003ca href=\"https://github.com/ravi-jindal\"\u003e\u003ccode\u003e@​ravi-jindal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1827\"\u003emicrosoft/presidio#1827\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix _process_names unconditionally treating all metadata as PHI by \u003ca href=\"https://github.com/Mr-Neutr0n\"\u003e\u003ccode\u003e@​Mr-Neutr0n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1855\"\u003emicrosoft/presidio#1855\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Add UK Postcode (UK_POSTCODE) recognizer by \u003ca href=\"https://github.com/tee-jagz\"\u003e\u003ccode\u003e@​tee-jagz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1858\"\u003emicrosoft/presidio#1858\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePin ruff and build pip installs by hash for OSSF scorecard compliance by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1864\"\u003emicrosoft/presidio#1864\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd US NPI (National Provider Identifier) recognizer by \u003ca href=\"https://github.com/stevenelliottjr\"\u003e\u003ccode\u003e@​stevenelliottjr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1847\"\u003emicrosoft/presidio#1847\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd transformer-based MedicalNERRecognizer for clinical entity detection by \u003ca href=\"https://github.com/stevenelliottjr\"\u003e\u003ccode\u003e@​stevenelliottjr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1853\"\u003emicrosoft/presidio#1853\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Add Nigeria recognizers (National Identity Number and Vehicle Registration) by \u003ca href=\"https://github.com/tee-jagz\"\u003e\u003ccode\u003e@​tee-jagz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1863\"\u003emicrosoft/presidio#1863\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix validation_result type in api docs and type hint by \u003ca href=\"https://github.com/akios-ai\"\u003e\u003ccode\u003e@​akios-ai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/microsoft/presidio/pull/1869\"\u003emicrosoft/presidio#1869\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python from 6.0.0 to 6.2.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/microsoft/presidio/pull/1879\"\u003emicrosoft/presidio#1879\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump github/codeql-action from 3.32.3 to 4.32.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/microsoft/presidio/pull/1878\"\u003emicrosoft/presidio#1878\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/dependency-review-action from 3.1.5 to 4.8.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/microsoft/presidio/pull/1877\"\u003emicrosoft/presidio#1877\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump microsoft/security-devops-action from 1.11.0 to 1.12.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/microsoft/presidio/pull/1876\"\u003emicrosoft/presidio#1876\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/github-script from 7.0.1 to 8.0.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/microsoft/presidio/pull/1875\"\u003emicrosoft/presidio#1875\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump azure/login from 2.1.1 to 2.3.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/microsoft/presidio/pull/1874\"\u003emicrosoft/presidio#1874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump docker/setup-buildx-action from 3.7.1 to 3.12.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/microsoft/presidio/pull/1873\"\u003emicrosoft/presidio#1873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/cache from 4.2.0 to 5.0.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/microsoft/presidio/pull/1872\"\u003emicrosoft...\n\n_Description has been truncated_","html_url":"https://github.com/classifyre-com/classifyre/pull/59","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/classifyre-com%2Fclassifyre/issues/59","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/59/packages"}},{"old_version":"5.2.0","new_version":"7.4.3","update_type":"major","path":null,"pr_created_at":"2026-05-12T05:26:32.000Z","version_change":"5.2.0 → 7.4.3","issue":{"uuid":"4426443027","node_id":"PR_kwDOMFeY887aiI0c","number":181,"state":"open","title":"python-deps(deps): bump the python-dependencies group across 1 directory with 15 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":4,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-12T05:26:32.000Z","updated_at":"2026-05-12T05:37:51.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"python-deps(deps): bump","group_name":"python-dependencies","update_count":15,"packages":[{"name":"packaging","old_version":"26.1","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pydantic","old_version":"2.13.3","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.0","repository_url":"https://github.com/psf/requests"},{"name":"coverage","old_version":"7.13.5","new_version":"7.14.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"pytest-order","old_version":"1.3.0","new_version":"1.4.0","repository_url":"https://github.com/pytest-dev/pytest-order"},{"name":"chardet","old_version":"5.2.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"dataproperty","old_version":"1.1.0","new_version":"1.1.1","repository_url":"https://github.com/thombashi/DataProperty"},{"name":"idna","old_version":"3.13","new_version":"3.14","repository_url":"https://github.com/kjd/idna"},{"name":"mbstrdecoder","old_version":"1.1.4","new_version":"1.1.5","repository_url":"https://github.com/thombashi/mbstrdecoder"},{"name":"pytz","old_version":"2026.1.post1","new_version":"2026.2","repository_url":"https://github.com/stub42/pytz"},{"name":"tabledata","old_version":"1.3.4","new_version":"1.3.5","repository_url":"https://github.com/thombashi/tabledata"},{"name":"typepy","old_version":"1.3.4","new_version":"2.0.0","repository_url":"https://github.com/thombashi/typepy"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"pathspec","old_version":"1.1.0","new_version":"1.1.1","repository_url":"https://github.com/cpburnz/python-pathspec"},{"name":"pydantic-core","old_version":"2.46.3","new_version":"2.46.4","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-dependencies group with 15 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [packaging](https://github.com/pypa/packaging) | `26.1` | `26.2` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.3` | `2.13.4` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.13.5` | `7.14.0` |\n| [pytest-order](https://github.com/pytest-dev/pytest-order) | `1.3.0` | `1.4.0` |\n| [chardet](https://github.com/chardet/chardet) | `5.2.0` | `7.4.3` |\n| [dataproperty](https://github.com/thombashi/DataProperty) | `1.1.0` | `1.1.1` |\n| [idna](https://github.com/kjd/idna) | `3.13` | `3.14` |\n| [mbstrdecoder](https://github.com/thombashi/mbstrdecoder) | `1.1.4` | `1.1.5` |\n| [pytz](https://github.com/stub42/pytz) | `2026.1.post1` | `2026.2` |\n| [tabledata](https://github.com/thombashi/tabledata) | `1.3.4` | `1.3.5` |\n| [typepy](https://github.com/thombashi/typepy) | `1.3.4` | `2.0.0` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [pathspec](https://github.com/cpburnz/python-pathspec) | `1.1.0` | `1.1.1` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.3` | `2.46.4` |\n\n\nUpdates `packaging` from 26.1 to 26.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/releases\"\u003epackaging's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix incorrect sysconfig var name for pyemscripten by \u003ca href=\"https://github.com/ryanking13\"\u003e\u003ccode\u003e@​ryanking13\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1160\"\u003epypa/packaging#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003eVersion\u003c/code\u003e, \u003ccode\u003eSpecifier\u003c/code\u003e, \u003ccode\u003eSpecifierSet\u003c/code\u003e, \u003ccode\u003eTag\u003c/code\u003e, \u003ccode\u003eMarker\u003c/code\u003e, and \u003ccode\u003eRequirement\u003c/code\u003e pickle-safe\nand backward-compatible with pickles created in 25.0-26.1 (including references to the removed\n\u003ccode\u003epackaging._structures\u003c/code\u003e module) by \u003ca href=\"https://github.com/eachimei\"\u003e\u003ccode\u003e@​eachimei\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1163\"\u003epypa/packaging#1163\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1168\"\u003epypa/packaging#1168\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1170\"\u003epypa/packaging#1170\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1171\"\u003epypa/packaging#1171\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: re-export ExceptionGroup for now by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1164\"\u003epypa/packaging#1164\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDocumentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edocs: add errors section and fix missing details by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1159\"\u003epypa/packaging#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs(dev): document property-based test suite by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1167\"\u003epypa/packaging#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in DirectUrl documentation by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1169\"\u003epypa/packaging#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs(specifiers): add is_unsatisfiable() usage example by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1166\"\u003epypa/packaging#1166\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnable the auditor persona on zizmor by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1158\"\u003epypa/packaging#1158\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTest new pickle guarantees by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1174\"\u003epypa/packaging#1174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse native uv integration in rtd by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1175\"\u003epypa/packaging#1175\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ryanking13\"\u003e\u003ccode\u003e@​ryanking13\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1160\"\u003epypa/packaging#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/eachimei\"\u003e\u003ccode\u003e@​eachimei\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1163\"\u003epypa/packaging#1163\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/packaging/compare/26.1...26.2\"\u003ehttps://github.com/pypa/packaging/compare/26.1...26.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/blob/main/CHANGELOG.rst\"\u003epackaging's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e26.2 - 2026-04-24\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\nFixes:\n\u003cul\u003e\n\u003cli\u003eFix incorrect sysconfig var name for pyemscripten in (:pull:\u003ccode\u003e1160\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003eVersion\u003c/code\u003e, \u003ccode\u003eSpecifier\u003c/code\u003e, \u003ccode\u003eSpecifierSet\u003c/code\u003e, \u003ccode\u003eTag\u003c/code\u003e, \u003ccode\u003eMarker\u003c/code\u003e, and \u003ccode\u003eRequirement\u003c/code\u003e pickle-safe\u003cbr /\u003e\nand backward-compatible with pickles created in 25.0-26.1 (including references to the removed\u003cbr /\u003e\n\u003ccode\u003epackaging._structures\u003c/code\u003e module) (:pull:\u003ccode\u003e1163\u003c/code\u003e, :pull:\u003ccode\u003e1168\u003c/code\u003e, :pull:\u003ccode\u003e1170\u003c/code\u003e, :pull:\u003ccode\u003e1171\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRe-export \u003ccode\u003eExceptionGroup\u003c/code\u003e in metadata for now in (:pull:\u003ccode\u003e1164\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDocumentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd errors section and fix missing details in (:pull:\u003ccode\u003e1159\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDocument our property-based test suite in (:pull:\u003ccode\u003e1167\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix a \u003ccode\u003eDirectUrl\u003c/code\u003e typo in (:pull:\u003ccode\u003e1169\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd example of \u003ccode\u003eis_unsatisfiable\u003c/code\u003e in (:pull:\u003ccode\u003e1166\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnable the auditor persona on zizmor in (:pull:\u003ccode\u003e1158\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eTest new pickle guarantees in (:pull:\u003ccode\u003e1174\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eUse new native ReadTheDocs uv integration in (:pull:\u003ccode\u003e1175\u003c/code\u003e)\u003cbr /\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/pypa/packaging/commit/84a87ee42483d7352f9502d78a9553da8859aa7a\"\u003e\u003ccode\u003e84a87ee\u003c/code\u003e\u003c/a\u003e Bump for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/4a616b65bed23c8c6d58e6b0fc1a4434d4ff1f14\"\u003e\u003ccode\u003e4a616b6\u003c/code\u003e\u003c/a\u003e docs: a few more updates to prepare for 26.2 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1176\"\u003e#1176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/9de6f44f1e82d4595edf3aad1c4f6f98c85935a0\"\u003e\u003ccode\u003e9de6f44\u003c/code\u003e\u003c/a\u003e ci: use native uv integration in rtd (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1175\"\u003e#1175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/bc76e14debd1a2799d1ca8f9d9c9823f35bfa466\"\u003e\u003ccode\u003ebc76e14\u003c/code\u003e\u003c/a\u003e chore: update changelog for 26.2 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1161\"\u003e#1161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/3f00091c08f0aa830e33ed7db00f16f11c8ac97f\"\u003e\u003ccode\u003e3f00091\u003c/code\u003e\u003c/a\u003e tests: add a pickle check (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1174\"\u003e#1174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/48a8a069805291186522de3eff73ea80a8ca96ad\"\u003e\u003ccode\u003e48a8a06\u003c/code\u003e\u003c/a\u003e fix: make Requirements/Markers pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1171\"\u003e#1171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/823b44ed1f904084a77ae3adf0ef130af6365f84\"\u003e\u003ccode\u003e823b44e\u003c/code\u003e\u003c/a\u003e fix: make Tags pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1170\"\u003e#1170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/4bed32d920ca7211dd65fdf0a1ee06376e9c4733\"\u003e\u003ccode\u003e4bed32d\u003c/code\u003e\u003c/a\u003e fix: make Specifier / SpecifierSet pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1168\"\u003e#1168\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/963118e37caae97bc8b72f72956c7fb4ca9857ec\"\u003e\u003ccode\u003e963118e\u003c/code\u003e\u003c/a\u003e fix: re-export ExceptionGroup for now (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1164\"\u003e#1164\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/66e34a80256c96dea11da143682950c84b8133bb\"\u003e\u003ccode\u003e66e34a8\u003c/code\u003e\u003c/a\u003e docs(specifiers): add is_unsatisfiable() usage example (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1166\"\u003e#1166\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/packaging/compare/26.1...26.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.3 to 2.13.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.4/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/cf67d4b3193c3fe43ede18612ed62785eee11382\"\u003e\u003ccode\u003ecf67d4b\u003c/code\u003e\u003c/a\u003e Fix linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/f0d8a214a5803036db46a56b1f62f1e56b81d662\"\u003e\u003ccode\u003ef0d8a21\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/5e3fe1d41a00f441204241c66078003ae0391f9a\"\u003e\u003ccode\u003e5e3fe1d\u003c/code\u003e\u003c/a\u003e Check for pydantic tag pattern in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7f9edcc2a191d2eaa9751220eb910914e716a686\"\u003e\u003ccode\u003e7f9edcc\u003c/code\u003e\u003c/a\u003e Document tagging conventions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b46a0c9b8a4dd967fda8ec1a92f6437076bf262c\"\u003e\u003ccode\u003eb46a0c9\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/50629c851e61d887d5420452c311ec6203f1f400\"\u003e\u003ccode\u003e50629c8\u003c/code\u003e\u003c/a\u003e Update to PyPy 7.3.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/8522ebb71e5e9a6f7188af5f009f01785b8cf725\"\u003e\u003ccode\u003e8522ebb\u003c/code\u003e\u003c/a\u003e Preserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a37f3aff090ca342dc5f48304889963530b993f8\"\u003e\u003ccode\u003ea37f3af\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003eMISSING\u003c/code\u003e sentinel test to work with unreleased \u003ccode\u003etyping_extensions\u003c/code\u003e ver...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/909259a9df660518033aa686b689f045a6eaf9d2\"\u003e\u003ccode\u003e909259a\u003c/code\u003e\u003c/a\u003e Remove Logfire example in documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2c4174c366606fc2dc46cb806833a080aefa77df\"\u003e\u003ccode\u003e2c4174c\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.155 to 0.2.185\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.1 to 2.34.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cjriches\"\u003e\u003ccode\u003e@​cjriches\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7365\"\u003epsf/requests#7365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dsanader\"\u003e\u003ccode\u003e@​dsanader\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7376\"\u003epsf/requests#7376\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/DimitriPapadopoulos\"\u003e\u003ccode\u003e@​DimitriPapadopoulos\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7393\"\u003epsf/requests#7393\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joshua-51\"\u003e\u003ccode\u003e@​joshua-51\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7416\"\u003epsf/requests#7416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/eggsort\"\u003e\u003ccode\u003e@​eggsort\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7421\"\u003epsf/requests#7421\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typhon8\"\u003e\u003ccode\u003e@​typhon8\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7315\"\u003epsf/requests#7315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7425\"\u003epsf/requests#7425\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2340-2026-05-11\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2340-2026-05-11\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/3816cfa1abd42dca21b9e837f26c59b246016aaf\"\u003e\u003ccode\u003e3816cfa\u003c/code\u003e\u003c/a\u003e Parameterize SupportsItems to handle Mapping key invariance (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7426\"\u003e#7426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b684dcb9bbf3aa557d1238e72062c4a29737dd1c\"\u003e\u003ccode\u003eb684dcb\u003c/code\u003e\u003c/a\u003e sessions: fix hooks type (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7425\"\u003e#7425\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/dc9dbdfb3434c6e58d48fd102f93e5342308817e\"\u003e\u003ccode\u003edc9dbdf\u003c/code\u003e\u003c/a\u003e Formalize 3.15 support (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/25340ebad09a38e0748aeb26232102022a03ec94\"\u003e\u003ccode\u003e25340eb\u003c/code\u003e\u003c/a\u003e Clear proxy env vars before every test run (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7423\"\u003e#7423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/fd628095d7b9ddbf3e987d8a4bf0e6062768916f\"\u003e\u003ccode\u003efd62809\u003c/code\u003e\u003c/a\u003e Preserve leading slashes in request path_url (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e8d2c015eecda8273612dd4562425e00cd164ba5\"\u003e\u003ccode\u003ee8d2c01\u003c/code\u003e\u003c/a\u003e docs: Fix missing hook output in docs example (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7421\"\u003e#7421\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/eb173bc819c72580deed2d54190d340cc769e529\"\u003e\u003ccode\u003eeb173bc\u003c/code\u003e\u003c/a\u003e Add 3.14t support to CI (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.1...v2.34.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.13.5 to 7.14.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.14.0 — 2026-05-10\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFeature: now when running one of the reporting commands, if there are\nparallel data files that need combining, they will be implicitly combined\nbefore creating the report. There is no option to avoid the combination; let\nus know if you have a use case that requires it.  Thanks, \u003ccode\u003eTim Hatch \u0026lt;pull 2162_\u0026gt;\u003c/code\u003e\u003cem\u003e. Closes \u003ccode\u003eissue 1781\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the output from \u003ccode\u003ecombine\u003c/code\u003e was too verbose, listing each file\nconsidered. Now it shows a single line with the counts of files combined,\nfiles skipped, and files with errors. The \u003ccode\u003e-q\u003c/code\u003e flag suppresses this line.\nThe old detailed lines are available with the new \u003ccode\u003e--debug=combine\u003c/code\u003e option.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: running a Python file through a symlink now sets the sys.path correctly,\nmatching regular Python behavior. Fixes \u003ccode\u003eissue 2157\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003eCollector.flush_data\u003c/code\u003e could fail with \u0026quot;RuntimeError: Set changed\nsize during iteration\u0026quot; when a tracer in another thread added a line to the\nper-file set that \u003ccode\u003eadd_lines\u003c/code\u003e (or \u003ccode\u003eadd_arcs\u003c/code\u003e) was iterating. The values\npassed to \u003ccode\u003eCoverageData\u003c/code\u003e are now snapshotted via \u003ccode\u003edict.copy()\u003c/code\u003e and\n\u003ccode\u003eset.copy()\u003c/code\u003e, which are atomic under the GIL. Thanks, \u003ccode\u003eAlex Vandiver \u0026lt;pull 2165_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the soft keyword \u003ccode\u003elazy\u003c/code\u003e is now bolded in HTML reports.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWe are no longer testing eventlet support. Eventlet started issuing stern\ndeprecation warnings that break our tests. Our support code is still there.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 1781: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/1781\"\u003ecoveragepy/coveragepy#1781\u003c/a\u003e\n.. _issue 2157: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2157\"\u003ecoveragepy/coveragepy#2157\u003c/a\u003e\n.. _pull 2162: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2162\"\u003ecoveragepy/coveragepy#2162\u003c/a\u003e\n.. _pull 2165: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2165\"\u003ecoveragepy/coveragepy#2165\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-13-5:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/646351b60429f1b5760af6c1b97b28483244a955\"\u003e\u003ccode\u003e646351b\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/39cd015505c8b04369c5b06e34fc22449a697370\"\u003e\u003ccode\u003e39cd015\u003c/code\u003e\u003c/a\u003e docs: prep for 7.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/649e8aa34af7d80c386ae82e8a3a6c9a3acb0dab\"\u003e\u003ccode\u003e649e8aa\u003c/code\u003e\u003c/a\u003e docs: thanks Alex Vandiver for \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2165\"\u003e#2165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/8cd392e3b5c4bc15d534aaec0c21714f9f518469\"\u003e\u003ccode\u003e8cd392e\u003c/code\u003e\u003c/a\u003e fix: snapshot data in Collector.flush_data to avoid threading race (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2165\"\u003e#2165\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c48e0edc2ebe44621b0053176e90f77b0c79bec1\"\u003e\u003ccode\u003ec48e0ed\u003c/code\u003e\u003c/a\u003e fix: less output for combining\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c2a3a284078556c911e0d9b6c6af1b7082a363ea\"\u003e\u003ccode\u003ec2a3a28\u003c/code\u003e\u003c/a\u003e docs: explain the change from \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2162\"\u003e#2162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1cd47aa6ac1da4e150da44055295d4e4f3a014e8\"\u003e\u003ccode\u003e1cd47aa\u003c/code\u003e\u003c/a\u003e fix: implicit combine-during-report now removes the combined data files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/2d99fd7696e0bccec8037479a4e45c1ecccb8058\"\u003e\u003ccode\u003e2d99fd7\u003c/code\u003e\u003c/a\u003e feat: automatically combine coverage in report, thanks Tim Hatch (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2162\"\u003e#2162\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/9fbdcdfee1c122fac43f1bf9a5e2d1f4d835f21c\"\u003e\u003ccode\u003e9fbdcdf\u003c/code\u003e\u003c/a\u003e fix: lazy soft keywords are bolded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/5de7d0267b9466d59995aaae1a7e707c8c6f66e7\"\u003e\u003ccode\u003e5de7d02\u003c/code\u003e\u003c/a\u003e build: oops, misplaced quote\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.13.5...7.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-order` 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-order/releases\"\u003epytest-order's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\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.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/43375ca14b7a9d50f8645700998dbe2fcd2bcbf5\"\u003e\u003ccode\u003e43375ca\u003c/code\u003e\u003c/a\u003e Release 1.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/0e1d1efc4fa45554fb4db517f12b07dd58ea7f6c\"\u003e\u003ccode\u003e0e1d1ef\u003c/code\u003e\u003c/a\u003e Added option --order-after-ff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/3c5f6f9b5944de8dad81342b38519ecca39e508e\"\u003e\u003ccode\u003e3c5f6f9\u003c/code\u003e\u003c/a\u003e Remove Python 3.9, add Python 3.14 to CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/66dd806fc07b9dd5db76185934f7cdf8b7e3a83a\"\u003e\u003ccode\u003e66dd806\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/6a76a9424a7c6eb5e3c9cac0acf3a5139ccbbd53\"\u003e\u003ccode\u003e6a76a94\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/87112f48676660eac77bac6856d97e5bdcd91653\"\u003e\u003ccode\u003e87112f4\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/4d84b464867c350a4d88d19437eeec90e741b2c8\"\u003e\u003ccode\u003e4d84b46\u003c/code\u003e\u003c/a\u003e Bump codecov/codecov-action from 5 to 6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/9933cf58aef484e2c5f4c6addaa6136d66865cd1\"\u003e\u003ccode\u003e9933cf5\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/f9c43a14905444a557e556d289854596031feccf\"\u003e\u003ccode\u003ef9c43a1\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/783c9b6b6ab8b0741cb39ae10351074e622a34d9\"\u003e\u003ccode\u003e783c9b6\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.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `chardet` from 5.2.0 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `dataproperty` from 1.1.0 to 1.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/thombashi/DataProperty/releases\"\u003edataproperty's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the actions-dependencies group across 1 directory with 6 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/thombashi/DataProperty/pull/65\"\u003ethombashi/DataProperty#65\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/DataProperty/pull/66\"\u003ethombashi/DataProperty#66\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003etypepy\u003c/code\u003e version constraint to \u0026lt;3  by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/DataProperty/pull/67\"\u003ethombashi/DataProperty#67\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/thombashi/DataProperty/pull/65\"\u003ethombashi/DataProperty#65\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/thombashi/DataProperty/compare/v1.1.0...v1.1.1\"\u003ehttps://github.com/thombashi/DataProperty/compare/v1.1.0...v1.1.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/e3f5cc0acd857ef68e245b3e52cfa105640784bd\"\u003e\u003ccode\u003ee3f5cc0\u003c/code\u003e\u003c/a\u003e Bump version to 1.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/da381f606e06572d990cd22f69fb02ae6a7c1892\"\u003e\u003ccode\u003eda381f6\u003c/code\u003e\u003c/a\u003e Update copyright year\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/efc5495a99eb2fc57e407d959fdf5e4db716b5a7\"\u003e\u003ccode\u003eefc5495\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/DataProperty/issues/67\"\u003e#67\u003c/a\u003e from thombashi/update_requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/5fb50822fb3d7298d5f7333b3dcce9aa7c9f4eb0\"\u003e\u003ccode\u003e5fb5082\u003c/code\u003e\u003c/a\u003e Update docs_requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/b80bc1948267ce37b1df9af03f0390f603a6a499\"\u003e\u003ccode\u003eb80bc19\u003c/code\u003e\u003c/a\u003e Update typepy[datetime] version constraint to \u0026lt;3 in requirements.txt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/b29d3f27b5cec4558c1970f0c82f4236727c679d\"\u003e\u003ccode\u003eb29d3f2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/DataProperty/issues/66\"\u003e#66\u003c/a\u003e from thombashi/add_python314_support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/6396dfdf762b3b859e3ae20ba17fdd8996135b9f\"\u003e\u003ccode\u003e6396dfd\u003c/code\u003e\u003c/a\u003e Apply formatter\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/a80abdedf6fa0a0e910365e2e3eb57642a54b9f5\"\u003e\u003ccode\u003ea80abde\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/962844c405235c7812ad26d15932a2a5bd73242c\"\u003e\u003ccode\u003e962844c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/DataProperty/issues/65\"\u003e#65\u003c/a\u003e from thombashi/dependabot/github_actions/actions-depen...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/DataProperty/commit/8bb29c272df8d5622c38e56ca6a910b1372b45df\"\u003e\u003ccode\u003e8bb29c2\u003c/code\u003e\u003c/a\u003e Bump the actions-dependencies group across 1 directory with 6 updates\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/thombashi/DataProperty/compare/v1.1.0...v1.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.13 to 3.14\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.rst\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e3.14 (2026-05-10)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved opportunity to process long inputs into quadratic\ntime by rejecting oversize inputs up-front. Closes a bypass\nof the CVE-2024-3651 mitigation. [GHSA-65pc-fj4g-8rjx]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Stan Ulbrych for reporting the issue.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/37b6b7497aee4805f7a74a7d86206ac05be9669a\"\u003e\u003ccode\u003e37b6b74\u003c/code\u003e\u003c/a\u003e Release v3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/628fef84d3eda59321c21127e73dcd873db23ead\"\u003e\u003ccode\u003e628fef8\u003c/code\u003e\u003c/a\u003e Use valid_string_length() for early oversized-input check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1e26c7fd93c67995422af9d1f071f45ee6433fd0\"\u003e\u003ccode\u003e1e26c7f\u003c/code\u003e\u003c/a\u003e Tweak release wording\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/ab5668fb6eaf4254d91d6993c0b23e98e21202fb\"\u003e\u003ccode\u003eab5668f\u003c/code\u003e\u003c/a\u003e Pre-release 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c0dda4501df5d91c3181ce6f962dc5de74e82cc1\"\u003e\u003ccode\u003ec0dda45\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/b7391f4c240bf2eae80eaed0a2ef7c2e0496af96\"\u003e\u003ccode\u003eb7391f4\u003c/code\u003e\u003c/a\u003e Add docstrings to package (\u003ca href=\"https://redirect.github.com/kjd/idna/issues/226\"\u003e#226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/0f4a28d88f8cce54269f0b6a42edf5e6a5424319\"\u003e\u003ccode\u003e0f4a28d\u003c/code\u003e\u003c/a\u003e Raise IDNAError on non-string input to encode/decode (\u003ca href=\"https://redirect.github.com/kjd/idna/issues/224\"\u003e#224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/7e6df7196e6396b5b84b9530eab8272b5ad51898\"\u003e\u003ccode\u003e7e6df71\u003c/code\u003e\u003c/a\u003e Address type issues found by \u003ccode\u003ety\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/kjd/idna/issues/225\"\u003e#225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/6ebfaab9ea718dce38a7c17ddafd7fb28b0468d4\"\u003e\u003ccode\u003e6ebfaab\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/221\"\u003e#221\u003c/a\u003e from kjd/release-3.13\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/kjd/idna/compare/v3.13...v3.14\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mbstrdecoder` from 1.1.4 to 1.1.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/thombashi/mbstrdecoder/releases\"\u003embstrdecoder's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.1.5\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.9 and add support for Python 3.14 by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/mbstrdecoder/pull/16\"\u003ethombashi/mbstrdecoder#16\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport chardet 6: \u003ca href=\"https://redirect.github.com/thombashi/mbstrdecoder/issues/14\"\u003e#14\u003c/a\u003e (Thanks to \u003ca href=\"https://github.com/musicinmybrain\"\u003e\u003ccode\u003e@​musicinmybrain\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/thombashi/mbstrdecoder/compare/v1.1.4...v1.1.5\"\u003ehttps://github.com/thombashi/mbstrdecoder/compare/v1.1.4...v1.1.5\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/mbstrdecoder/commit/844a2974c988f196740bfe13575d168510e007f2\"\u003e\u003ccode\u003e844a297\u003c/code\u003e\u003c/a\u003e Bump version to 1.1.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/mbstrdecoder/commit/c36f1fcb7e17240de05160930a8676aabe4ba55b\"\u003e\u003ccode\u003ec36f1fc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/mbstrdecoder/issues/16\"\u003e#16\u003c/a\u003e from thombashi/support-py314-drop-py39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/mbstrdecoder/commit/8b2ddbfe521ba32299d90f1cd42333fe604c3027\"\u003e\u003ccode\u003e8b2ddbf\u003c/code\u003e\u003c/a\u003e Drop support for Python 3.9 and add support for Python 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/mbstrdecoder/commit/c7973334b72d7ef7113aa5e23eda20bcf25d922d\"\u003e\u003ccode\u003ec797333\u003c/code\u003e\u003c/a\u003e Update chardet version constraint to allow versions below 7\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/thombashi/mbstrdecoder/compare/v1.1.4...v1.1.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytz` from 2026.1.post1 to 2026.2\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/stub42/pytz/commit/45957c55be9dbf013b636aeb7d22dc7bec81a9f4\"\u003e\u003ccode\u003e45957c5\u003c/code\u003e\u003c/a\u003e Bump github actions/checkout to \u003ca href=\"https://github.com/v6\"\u003e\u003ccode\u003e@​v6\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/stub42/pytz/commit/8e927c67c98ccde3624642f2f32cd6c5208a5161\"\u003e\u003ccode\u003e8e927c6\u003c/code\u003e\u003c/a\u003e Bump version numbers to 2026.2 (IANA 2026b)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/stub42/pytz/commit/6f08adec7bcb382e78afedb660f94f38a093fddf\"\u003e\u003ccode\u003e6f08ade\u003c/code\u003e\u003c/a\u003e IANA 2026b\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/stub42/pytz/commit/edbfbdf8f708657ce5b9fee32e2f8eaa8647359a\"\u003e\u003ccode\u003eedbfbdf\u003c/code\u003e\u003c/a\u003e Squashed 'tz/' changes from dd6be6d155..8be0d5483d\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/stub42/pytz/commit/a148b0390a42ea9a95ef7f6d8c346307405708d5\"\u003e\u003ccode\u003ea148b03\u003c/code\u003e\u003c/a\u003e Fix typo in README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/stub42/pytz/commit/b841195f5df79455ee3aa9ec3d8749af835dab48\"\u003e\u003ccode\u003eb841195\u003c/code\u003e\u003c/a\u003e fix typo\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/stub42/pytz/compare/release_2026.1.post1...release_2026.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tabledata` from 1.3.4 to 1.3.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/thombashi/tabledata/releases\"\u003etabledata's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.5\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the actions-dependencies group across 1 directory with 6 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/thombashi/tabledata/pull/8\"\u003ethombashi/tabledata#8\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 and add support for Python 3.14 by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/tabledata/pull/9\"\u003ethombashi/tabledata#9\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate requirements by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/tabledata/pull/10\"\u003ethombashi/tabledata#10\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the error messages of the \u003ccode\u003eTableData.validate_rows\u003c/code\u003e method\u003c/li\u003e\n\u003cli\u003eFix a type annotation of the \u003ccode\u003eTableData.filter_column\u003c/code\u003e method\u003c/li\u003e\n\u003cli\u003eFix equality comparison in TableData to handle NaN values correctly\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/thombashi/tabledata/pull/8\"\u003ethombashi/tabledata#8\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/thombashi/tabledata/compare/v1.3.4...v1.3.5\"\u003ehttps://github.com/thombashi/tabledata/compare/v1.3.4...v1.3.5\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/09e26a968af42a404e0b86b21596922b774f8942\"\u003e\u003ccode\u003e09e26a9\u003c/code\u003e\u003c/a\u003e Bump version to 1.3.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/10cf6635129960103edd9c4018dd656ff919b274\"\u003e\u003ccode\u003e10cf663\u003c/code\u003e\u003c/a\u003e Update copyright year\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/3994ac9c12d09a6c331464aa34ac4ffe06ab3a94\"\u003e\u003ccode\u003e3994ac9\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/tabledata/issues/11\"\u003e#11\u003c/a\u003e from thombashi/drop-py39-add-py314\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/275348ed3a9fc9d1ee042b53b5023e6fdb60c831\"\u003e\u003ccode\u003e275348e\u003c/code\u003e\u003c/a\u003e Fix equality comparison in TableData to handle NaN values correctly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/14d166529cd6ab7f7c938ec8a114153cc07ea1eb\"\u003e\u003ccode\u003e14d1665\u003c/code\u003e\u003c/a\u003e Fix a type annotation of the TableData.filter_column method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/b9ae41bf498b17055fb576045e376f64c4b9323f\"\u003e\u003ccode\u003eb9ae41b\u003c/code\u003e\u003c/a\u003e Fix the error messages of the TableData.validate_rows method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/78b795a15b5bec80a13c4c981f6b19b9ddc58aba\"\u003e\u003ccode\u003e78b795a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/tabledata/issues/10\"\u003e#10\u003c/a\u003e from thombashi/update_requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/cbcfef4bcd47411ae72b157849a38c4d6388404e\"\u003e\u003ccode\u003ecbcfef4\u003c/code\u003e\u003c/a\u003e Update requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/0d5ab3df9c92f252fa650a22c1b7e6c9660ac10e\"\u003e\u003ccode\u003e0d5ab3d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/tabledata/issues/9\"\u003e#9\u003c/a\u003e from thombashi/drop-py39-add-py314\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/tabledata/commit/e0d41582b3b9a5f70ccd35a30b8bbb60703c6f70\"\u003e\u003ccode\u003ee0d4158\u003c/code\u003e\u003c/a\u003e Drop support for Python 3.9 and add support for Python 3.14\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/thombashi/tabledata/compare/v1.3.4...v1.3.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typepy` from 1.3.4 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/thombashi/typepy/releases\"\u003etypepy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pytz with ZoneInfo + misc datetime fixes by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/typepy/pull/13\"\u003ethombashi/typepy#13\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/thombashi/typepy/pull/13\"\u003ethombashi/typepy#13\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/thombashi/typepy/compare/v1.3.5...v2.0.0\"\u003ehttps://github.com/thombashi/typepy/compare/v1.3.5...v2.0.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.3.5\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the actions-dependencies group across 1 directory with 6 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/thombashi/typepy/pull/9\"\u003ethombashi/typepy#9\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed an invalid input handle for DateTimeConverter by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/typepy/pull/10\"\u003ethombashi/typepy#10\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/typepy/pull/11\"\u003ethombashi/typepy#11\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix logic issues in type checking and conversion functions by \u003ca href=\"https://github.com/thombashi\"\u003e\u003ccode\u003e@​thombashi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/thombashi/typepy/pull/12\"\u003ethombashi/typepy#12\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/thombashi/typepy/compare/v1.3.4...v1.3.5\"\u003ehttps://github.com/thombashi/typepy/compare/v1.3.4...v1.3.5\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/2d7ed7069bd74696433a27ddabdac2feb77c246d\"\u003e\u003ccode\u003e2d7ed70\u003c/code\u003e\u003c/a\u003e Bump version to 2.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/f65a5b32b36d442c5af211b17d4f9b85d2a269ac\"\u003e\u003ccode\u003ef65a5b3\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/typepy/issues/13\"\u003e#13\u003c/a\u003e from JYOuyang/jyo-tz\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/dd5f44864053920820946f8abf00b57037136186\"\u003e\u003ccode\u003edd5f448\u003c/code\u003e\u003c/a\u003e setup.py: PEP 508 env marker to install tzdata if on Windows.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/c702aa0d7ce8257d249a034a7f52337c5aa38446\"\u003e\u003ccode\u003ec702aa0\u003c/code\u003e\u003c/a\u003e Replace pytz with ZoneInfo + misc datetime fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/92958dc4094188387319538bb8ee9f313b36aa43\"\u003e\u003ccode\u003e92958dc\u003c/code\u003e\u003c/a\u003e Bump version to 1.3.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/d514e7629c552d98e831fc53b28c64b9373711cf\"\u003e\u003ccode\u003ed514e76\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/typepy/issues/12\"\u003e#12\u003c/a\u003e from thombashi/fix-logic-issues\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/4692c23ce14051a96124fd8af46c1ff4db2b3eaa\"\u003e\u003ccode\u003e4692c23\u003c/code\u003e\u003c/a\u003e Fix logic issues in type checking and conversion functions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/de7043ee844f7cc80bb370cdf4343fd5c6a526a3\"\u003e\u003ccode\u003ede7043e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/thombashi/typepy/issues/11\"\u003e#11\u003c/a\u003e from thombashi/add-py314\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/998a550231692b11732c3deb39a61ba0e2c672c8\"\u003e\u003ccode\u003e998a550\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thombashi/typepy/commit/8d4fad51df1008c8cdad35a5fe375ab820b0fd1a\"\u003e\u003ccode\u003e8d4fad5\u003c/code\u003e\u003c/a\u003e Add permissions section to GitHub Actions workflow\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/thombashi/typepy/compare/v1.3.4...v2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `urllib3` from 2.6.3 to 2.7.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/urllib3/urllib3/releases\"\u003eurllib3's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7.0\u003c/h2\u003e\n\u003ch2\u003e🚀 urllib3 is fundraising for HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support\"\u003eurllib3 is raising ~$40,000 USD\u003c/a\u003e to release HTTP/2 support and ensure long-term sustainable maintenance of the project after a sharp decline in financial support. If your company or organization uses Python and would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and thousands of other projects \u003ca href=\"https://opencollective.com/urllib3\"\u003eplease consider contributing financially\u003c/a\u003e to ensure HTTP/2 support is developed sustainably and maintained for the long-haul.\u003c/p\u003e\n\u003cp\u003eThank you for your support.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eAddressed high-severity security issues. Impact was limited to specific use cases detailed in the accompanying advisories; overall user exposure was estimated to be marginal.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDecompression-bomb safeguards of the streaming API were bypassed:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWhen \u003ccode\u003eHTTPResponse.drain_conn()\u003c/code\u003e was called after the response had been read and decompressed partially. (Reported by \u003ca href=\"https://github.com/Cycloctane\"\u003e\u003ccode\u003e@​Cycloctane\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDuring the second \u003ccode\u003eHTTPResponse.read(amt=N)\u003c/code\u003e or \u003ccode\u003eHTTPResponse.stream(amt=N)\u003c/code\u003e call when the response was decompressed using the official \u003ca href=\"https://pypi.org/project/brotli/\"\u003eBrotli\u003c/a\u003e library. (Reported by \u003ca href=\"https://github.com/kimkou2024\"\u003e\u003ccode\u003e@​kimkou2024\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSee GHSA-mf9v-mfxr-j63j for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHTTP pools created using \u003ccode\u003eProxyManager.connection_from_url\u003c/code\u003e did not strip sensitive headers specified in \u003ccode\u003eRetry.remove_headers_on_redirect\u003c/code\u003e when redirecting to a different host. (GHSA-qccp-gfcp-xxvc reported by \u003ca href=\"https://github.com/christos-spearbit\"\u003e\u003ccode\u003e@​christos-spearbit\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUsed \u003ccode\u003eFutureWarning\u003c/code\u003e instead of \u003ccode\u003eDeprecationWarning\u003c/code\u003e for better visibility of existing deprecation notices. Rescheduled the removal of deprecated features to version 3.0. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3763\"\u003eurllib3/urllib3#3763\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life Python 3.9. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3720\"\u003eurllib3/urllib3#3720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life PyPy3.10. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4979\"\u003eurllib3/urllib3#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum supported pyOpenSSL version to 19.0.0. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3777\"\u003eurllib3/urllib3#3777\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read(amt=None)\u003c/code\u003e was ignoring decompressed data buffered from previous partial reads. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3636\"\u003eurllib3/urllib3#3636\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read()\u003c/code\u003e could cache only part of the response after a partial read when \u003ccode\u003ecache_content=True\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4967\"\u003eurllib3/urllib3#4967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eHTTPResponse.stream()\u003c/code\u003e and \u003ccode\u003eHTTPResponse.read_chunked()\u003c/code\u003e to handle \u003ccode\u003eamt=0\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3793\"\u003eurllib3/urllib3#3793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003e_TYPE_BODY\u003c/code\u003e type alias to include missing \u003ccode\u003eIterable[str]\u003c/code\u003e, matching the documented and runtime behavior of chunked request bodies. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3798\"\u003eurllib3/urllib3#3798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eLocationParseError\u003c/code\u003e when paths resembling schemeless URIs were passed to \u003ccode\u003eHTTPConnectionPool.urlopen()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3352\"\u003eurllib3/urllib3#3352\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eBaseHTTPResponse.readinto()\u003c/code\u003e type annotation to accept \u003ccode\u003ememoryview\u003c/code\u003e in addition to \u003ccode\u003ebytearray\u003c/code\u003e, matching the \u003ccode\u003eio.RawIOBase.readinto\u003c/code\u003e contract and enabling use with \u003ccode\u003eio.BufferedReader\u003c/code\u003e without type errors. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3764\"\u003eurllib3/urllib3#3764\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/urllib3/urllib3/blob/main/CHANGES.rst\"\u003eurllib3's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.7.0 (2026-05-07)\u003c/h1\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eAddressed high-severity security issues.\nImpact was limited to specific use cases detailed in the accompanying\nadvisories; overall user exposure was estimated to be marginal.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDecompression-bomb safeguards of the streaming API were bypassed:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWhen \u003ccode\u003eHTTPResponse.drain_conn()\u003c/code\u003e was called after the response had been\nread and decompressed partially.\u003c/li\u003e\n\u003cli\u003eDuring the second \u003ccode\u003eHTTPResponse.read(amt=N)\u003c/code\u003e or\n\u003ccode\u003eHTTPResponse.stream(amt=N)\u003c/code\u003e call when the response was decompressed\nusing the official \u003ccode\u003eBrotli \u0026lt;https://pypi.org/project/brotli/\u0026gt;\u003c/code\u003e__ library.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSee \u003ccode\u003eGHSA-mf9v-mfxr-j63j \u0026lt;https://github.com/urllib3/urllib3/security/advisories/GHSA-mf9v-mfxr-j63j\u0026gt;\u003c/code\u003e__\nfor details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHTTP pools created using \u003ccode\u003eProxyManager.connection_from_url\u003c/code\u003e did not strip\nsensitive headers specified in \u003ccode\u003eRetry.remove_headers_on_redirect\u003c/code\u003e when\nredirecting to a different host.\n(\u003ccode\u003eGHSA-qccp-gfcp-xxvc \u0026lt;https://github.com/urllib3/urllib3/security/advisories/GHSA-qccp-gfcp-xxvc\u0026gt;\u003c/code\u003e__)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUsed \u003ccode\u003eFutureWarning\u003c/code\u003e instead of \u003ccode\u003eDeprecationWarning\u003c/code\u003e for better\nvisibility of existing deprecation notices. Rescheduled the removal of\ndeprecated features to version 3.0.\n(\u003ccode\u003e[#3763](https://github.com/urllib3/urllib3/issues/3763) \u0026lt;https://github.com/urllib3/urllib3/issues/3763\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life Python 3.9.\n(\u003ccode\u003e[#3720](https://github.com/urllib3/urllib3/issues/3720) \u0026lt;https://github.com/urllib3/urllib3/issues/3720\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life PyPy3.10.\n(\u003ccode\u003e[#4979](https://github.com/urllib3/urllib3/issues/4979) \u0026lt;https://github.com/urllib3/urllib3/issues/4979\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eBumped the minimum supported pyOpenSSL version to 19.0.0.\n(\u003ccode\u003e[#3777](https://github.com/urllib3/urllib3/issues/3777) \u0026lt;https://github.com/urllib3/urllib3/issues/3777\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read(amt=None)\u003c/code\u003e was ignoring decompressed\ndata buffered from previous partial reads.\n(\u003ccode\u003e[#3636](https://github.com/urllib3/urllib3/issues/3636) \u0026lt;https://github.com/urllib3/urllib3/issues/3636\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read()\u003c/code\u003e could cache only part of the\nresponse after a partial read when \u003ccode\u003ecache_content=True\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/9a950b92d999f906b6020bb2d1076ee56cddd5d2\"\u003e\u003ccode\u003e9a950b9\u003c/code\u003e\u003c/a\u003e Release 2.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/5ec0de499b9166ca71c65ab04f2a7e4eb0d66fcc\"\u003e\u003ccode\u003e5ec0de4\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n...\n\n_Description has been truncated_","html_url":"https://github.com/tektronix/tm_data_types/pull/181","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tektronix%2Ftm_data_types/issues/181","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/181/packages"}},{"old_version":"7.4.1","new_version":"7.4.3","update_type":"patch","path":"/apps/backend","pr_created_at":"2026-05-10T15:14:09.000Z","version_change":"7.4.1 → 7.4.3","issue":{"uuid":"4415987272","node_id":"PR_kwDOSL5hwc7aAlI2","number":2,"state":"open","title":"deps(backend): bump the python-minor group in /apps/backend with 46 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-10T15:14:09.000Z","updated_at":"2026-05-10T15:14:10.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(backend): bump","group_name":"python-minor","update_count":46,"packages":[{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"chardet","old_version":"7.4.1","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"click","old_version":"8.1.8","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"},{"name":"exceptiongroup","old_version":"1.2.2","new_version":"1.3.1","repository_url":"https://github.com/agronholm/exceptiongroup"},{"name":"fsspec","old_version":"2026.3.0","new_version":"2026.4.0","repository_url":"https://github.com/fsspec/filesystem_spec"},{"name":"googleapis-common-protos","old_version":"1.74.0","new_version":"1.75.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"jsonschema","old_version":"4.25.1","new_version":"4.26.0","repository_url":"https://github.com/python-jsonschema/jsonschema"},{"name":"langchain-classic","old_version":"1.0.3","new_version":"1.0.7","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-text-splitters","old_version":"1.1.1","new_version":"1.1.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langgraph-checkpoint","old_version":"4.0.1","new_version":"4.0.3","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langgraph-prebuilt","old_version":"1.0.9","new_version":"1.0.13","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langgraph-sdk","old_version":"0.3.13","new_version":"0.3.14","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langsmith","old_version":"0.7.30","new_version":"0.8.3","repository_url":"https://github.com/langchain-ai/langsmith-sdk"},{"name":"mako","old_version":"1.3.10","new_version":"1.3.12","repository_url":"https://github.com/sqlalchemy/mako"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"mcp","old_version":"1.23.3","new_version":"1.27.1","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"mpmath","old_version":"1.3.0","new_version":"1.4.1","repository_url":"https://github.com/mpmath/mpmath"},{"name":"ollama","old_version":"0.6.1","new_version":"0.6.2","repository_url":"https://github.com/ollama/ollama-python"},{"name":"opentelemetry-api","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-threading","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-sdk","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"orjson","old_version":"3.11.8","new_version":"3.11.9","repository_url":"https://github.com/ijl/orjson"},{"name":"packaging","old_version":"26.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pathspec","old_version":"1.0.4","new_version":"1.1.1","repository_url":"https://github.com/cpburnz/python-pathspec"},{"name":"propcache","old_version":"0.4.1","new_version":"0.5.2","repository_url":"https://github.com/aio-libs/propcache"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.46.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pytz","old_version":"2026.1.post1","new_version":"2026.2","repository_url":"https://github.com/stub42/pytz"},{"name":"regex","old_version":"2026.4.4","new_version":"2026.5.9","repository_url":"https://github.com/mrabarnett/mrab-regex"},{"name":"ruamel-yaml-clib","old_version":"0.2.14","new_version":"0.2.15"},{"name":"sse-starlette","old_version":"3.3.4","new_version":"3.4.2","repository_url":"https://github.com/sysid/sse-starlette"},{"name":"tokenizers","old_version":"0.22.2","new_version":"0.23.1","repository_url":"https://github.com/huggingface/tokenizers"},{"name":"tomli","old_version":"2.0.2","new_version":"2.4.1","repository_url":"https://github.com/hukkin/tomli"},{"name":"torch","old_version":"2.10.0","new_version":"2.11.0","repository_url":"https://github.com/pytorch/pytorch"},{"name":"tzdata","old_version":"2026.1","new_version":"2026.2","repository_url":"https://github.com/python/tzdata"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"wcwidth","old_version":"0.6.0","new_version":"0.7.0","repository_url":"https://github.com/jquast/wcwidth"},{"name":"xxhash","old_version":"3.6.0","new_version":"3.7.0","repository_url":"https://github.com/ifduyue/python-xxhash"},{"name":"zipp","old_version":"3.23.0","new_version":"3.23.1","repository_url":"https://github.com/jaraco/zipp"}],"path":"/apps/backend","ecosystem":"pip"},"body":"Bumps the python-minor group in /apps/backend with 46 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.4.22` |\n| [chardet](https://github.com/chardet/chardet) | `7.4.1` | `7.4.3` |\n| [click](https://github.com/pallets/click) | `8.1.8` | `8.3.3` |\n| [exceptiongroup](https://github.com/agronholm/exceptiongroup) | `1.2.2` | `1.3.1` |\n| [fsspec](https://github.com/fsspec/filesystem_spec) | `2026.3.0` | `2026.4.0` |\n| [googleapis-common-protos](https://github.com/googleapis/google-cloud-python) | `1.74.0` | `1.75.0` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.13` |\n| [jsonschema](https://github.com/python-jsonschema/jsonschema) | `4.25.1` | `4.26.0` |\n| [langchain-classic](https://github.com/langchain-ai/langchain) | `1.0.3` | `1.0.7` |\n| [langchain-text-splitters](https://github.com/langchain-ai/langchain) | `1.1.1` | `1.1.2` |\n| [langgraph-checkpoint](https://github.com/langchain-ai/langgraph) | `4.0.1` | `4.0.3` |\n| [langgraph-prebuilt](https://github.com/langchain-ai/langgraph) | `1.0.9` | `1.0.13` |\n| [langgraph-sdk](https://github.com/langchain-ai/langgraph) | `0.3.13` | `0.3.14` |\n| [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.7.30` | `0.8.3` |\n| [mako](https://github.com/sqlalchemy/mako) | `1.3.10` | `1.3.12` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.23.3` | `1.27.1` |\n| [mpmath](https://github.com/mpmath/mpmath) | `1.3.0` | `1.4.1` |\n| [ollama](https://github.com/ollama/ollama-python) | `0.6.1` | `0.6.2` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-instrumentation-threading](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.58b0` | `0.62b1` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [orjson](https://github.com/ijl/orjson) | `3.11.8` | `3.11.9` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.2` |\n| [pathspec](https://github.com/cpburnz/python-pathspec) | `1.0.4` | `1.1.1` |\n| [propcache](https://github.com/aio-libs/propcache) | `0.4.1` | `0.5.2` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.46.4` |\n| [pytz](https://github.com/stub42/pytz) | `2026.1.post1` | `2026.2` |\n| [regex](https://github.com/mrabarnett/mrab-regex) | `2026.4.4` | `2026.5.9` |\n| ruamel-yaml-clib | `0.2.14` | `0.2.15` |\n| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.3.4` | `3.4.2` |\n| [tokenizers](https://github.com/huggingface/tokenizers) | `0.22.2` | `0.23.1` |\n| [tomli](https://github.com/hukkin/tomli) | `2.0.2` | `2.4.1` |\n| [torch](https://github.com/pytorch/pytorch) | `2.10.0` | `2.11.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.1` | `2026.2` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.6.0` | `0.7.0` |\n| [xxhash](https://github.com/ifduyue/python-xxhash) | `3.6.0` | `3.7.0` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.0` | `3.23.1` |\n\nUpdates `certifi` from 2026.2.25 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/0a49067eb434e53e1f8df5f7707d5dc05ef9def4\"\u003e\u003ccode\u003e0a49067\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/403\"\u003e#403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/acf6ce8e39e3b125f4349e11904295e4fe4c1bed\"\u003e\u003ccode\u003eacf6ce8\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/feb0ed26163a9417ea0fb8eb52d47e79fcf202ab\"\u003e\u003ccode\u003efeb0ed2\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7.0.0 to 8.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/397\"\u003e#397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d9c11a50369cc377abb40f7909ded3d6da4d98a3\"\u003e\u003ccode\u003ed9c11a5\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6.0.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/396\"\u003e#396\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.04.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `chardet` from 7.4.1 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.1.8 to 8.3.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.3.3\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.3 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.3.3/\"\u003ehttps://pypi.org/project/click/8.3.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-3\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-3\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/1026\"\u003e#1026\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1477\"\u003e#1477\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2775\"\u003e#2775\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3298\"\u003e#3298\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3299\"\u003e#3299\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3238\"\u003e#3238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3224\"\u003e#3224\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/654\"\u003e#654\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/824\"\u003e#824\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/843\"\u003e#843\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/951\"\u003e#951\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3235\"\u003e#3235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3177\"\u003e#3177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2836\"\u003e#2836\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2837\"\u003e#2837\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3165\"\u003e#3165\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3262\"\u003e#3262\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3280\"\u003e#3280\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3111\"\u003e#3111\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3189\"\u003e#3189\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3250\"\u003e#3250\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2865\"\u003e#2865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2879\"\u003e#2879\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.3.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.3.2/\"\u003ehttps://pypi.org/project/click/8.3.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/29\"\u003ehttps://github.com/pallets/click/milestone/29\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.rst\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.3.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-20\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n:issue:\u003ccode\u003e1026\u003c/code\u003e :pr:\u003ccode\u003e1477\u003c/code\u003e :pr:\u003ccode\u003e2775\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. :issue:\u003ccode\u003e3298\u003c/code\u003e :pr:\u003ccode\u003e3299\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. :pr:\u003ccode\u003e3238\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n:issue:\u003ccode\u003e3224\u003c/code\u003e :pr:\u003ccode\u003e3240\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n:issue:\u003ccode\u003e654\u003c/code\u003e :issue:\u003ccode\u003e824\u003c/code\u003e :issue:\u003ccode\u003e843\u003c/code\u003e :pr:\u003ccode\u003e951\u003c/code\u003e :pr:\u003ccode\u003e3235\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. :pr:\u003ccode\u003e3151\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. :pr:\u003ccode\u003e3151\u003c/code\u003e :pr:\u003ccode\u003e3177\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. :issue:\u003ccode\u003e2836\u003c/code\u003e :pr:\u003ccode\u003e2837\u003c/code\u003e :pr:\u003ccode\u003e3165\u003c/code\u003e :pr:\u003ccode\u003e3262\u003c/code\u003e :pr:\u003ccode\u003e3280\u003c/code\u003e\n:pr:\u003ccode\u003e3328\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. :issue:\u003ccode\u003e3111\u003c/code\u003e :pr:\u003ccode\u003e3239\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. :issue:\u003ccode\u003e3189\u003c/code\u003e :pr:\u003ccode\u003e3250\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n:issue:\u003ccode\u003e2865\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. :issue:\u003ccode\u003e2879\u003c/code\u003e :pr:\u003ccode\u003e3248\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.3.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-02\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eflag_value\u003c/code\u003e when \u003ccode\u003eis_flag=False\u003c/code\u003e to allow such options to be\nused without an explicit value. :issue:\u003ccode\u003e3084\u003c/code\u003e :pr:\u003ccode\u003e3152\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eHide \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values as \u003ccode\u003eNone\u003c/code\u003e when using \u003ccode\u003elookup_default()\u003c/code\u003e.\n:issue:\u003ccode\u003e3136\u003c/code\u003e :pr:\u003ccode\u003e3199\u003c/code\u003e :pr:\u003ccode\u003e3202\u003c/code\u003e :pr:\u003ccode\u003e3209\u003c/code\u003e :pr:\u003ccode\u003e3212\u003c/code\u003e :pr:\u003ccode\u003e3224\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c06d2d0a6aee6bcc50bd8257be2a4a592f4e75d0\"\u003e\u003ccode\u003ec06d2d0\u003c/code\u003e\u003c/a\u003e Release 8.3.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/f1f191ecd2c790b161187c78e7c88440e9524e5c\"\u003e\u003ccode\u003ef1f191e\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3343\"\u003e#3343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bb59ba0fd279ca085d1113f0499b6a602ca31081\"\u003e\u003ccode\u003ebb59ba0\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/4a352253c9ff013e36d11e4a6820d36d00ff2cd4\"\u003e\u003ccode\u003e4a35225\u003c/code\u003e\u003c/a\u003e Reduce blast-radius of \u003ccode\u003eUNSET\u003c/code\u003e in \u003ccode\u003edefault_map\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c07bb936de43fd303f9cfbefe248ab23fd2199c8\"\u003e\u003ccode\u003ec07bb93\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into unset-in-default-map\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c7e1ba8448cbcb2cdd9c1c7f4a592e863dcc3995\"\u003e\u003ccode\u003ec7e1ba8\u003c/code\u003e\u003c/a\u003e Reorder \u003ccode\u003eParameterSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/76552ff1e8c85837f911fc34037e702ae4327eda\"\u003e\u003ccode\u003e76552ff\u003c/code\u003e\u003c/a\u003e Show default string in prompt (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/ac5cec5fe54e5a691e7bac17f441ce9498e0744c\"\u003e\u003ccode\u003eac5cec5\u003c/code\u003e\u003c/a\u003e Reorder ParameterSource from most to least explicit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c452e00e6772931b7071d9316b82b77e5b8f280\"\u003e\u003ccode\u003e8c452e0\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into show-default-string-in-prompt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c95c73bd5ef89eac638f85f1904a104ba4b1a32\"\u003e\u003ccode\u003e8c95c73\u003c/code\u003e\u003c/a\u003e Reconcile default value passing and default activation (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.1.8...8.3.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `exceptiongroup` from 1.2.2 to 1.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/exceptiongroup/releases\"\u003eexceptiongroup's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.3.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eAttributeError: 'TracebackException' object has no attribute 'exceptions'\u003c/code\u003e when formatting unpickled TBEs from another Python process which did not apply the \u003ccode\u003eexceptiongroup\u003c/code\u003e patches (\u003ca href=\"https://redirect.github.com/agronholm/exceptiongroup/issues/144\"\u003e#144\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.3.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003e**kwargs\u003c/code\u003e to function and method signatures as appropriate to match the signatures in the standard library\u003c/li\u003e\n\u003cli\u003eIn line with the stdlib typings in typeshed, updated \u003ccode\u003e(Base)ExceptionGroup\u003c/code\u003e generic types to define defaults for their generic arguments (defaulting to \u003ccode\u003eBaseExceptionGroup[BaseException]\u003c/code\u003e and \u003ccode\u003eExceptionGroup[Exception]\u003c/code\u003e) (PR by \u003ca href=\"https://github.com/mikenerone\"\u003e\u003ccode\u003e@​mikenerone\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eBaseExceptionGroup.__init__()\u003c/code\u003e to directly call \u003ccode\u003eBaseException.__init__()\u003c/code\u003e instead of the superclass \u003ccode\u003e__init__()\u003c/code\u003e in order to emulate the CPython behavior (broken or not) (PR by \u003ca href=\"https://github.com/cfbolz\"\u003e\u003ccode\u003e@​cfbolz\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged the \u003ccode\u003eexceptions\u003c/code\u003e attribute to always return the same tuple of exceptions, created from the original exceptions sequence passed to \u003ccode\u003eBaseExceptionGroup\u003c/code\u003e to match CPython behavior (\u003ca href=\"https://redirect.github.com/agronholm/exceptiongroup/issues/143\"\u003e#143\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/exceptiongroup/blob/main/CHANGES.rst\"\u003eexceptiongroup's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eVersion history\u003c/h1\u003e\n\u003cp\u003eThis library adheres to \u003ccode\u003eSemantic Versioning 2.0 \u0026lt;http://semver.org/\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eUNRELEASED\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed the \u003ccode\u003erepr()\u003c/code\u003e of exception groups being affected by mutation of the\noriginal exception sequence after construction\n(\u003ccode\u003e[#154](https://github.com/agronholm/exceptiongroup/issues/154) \u0026lt;https://github.com/agronholm/exceptiongroup/issues/154\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e1.3.1\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eAttributeError: 'TracebackException' object has no attribute 'exceptions'\u003c/code\u003e\nwhen formatting unpickled TBEs from another Python process which did not apply the\n\u003ccode\u003eexceptiongroup\u003c/code\u003e patches\n(\u003ccode\u003e[#144](https://github.com/agronholm/exceptiongroup/issues/144) \u0026lt;https://github.com/agronholm/exceptiongroup/issues/144\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e1.3.0\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003e**kwargs\u003c/code\u003e to function and method signatures as appropriate to match the\nsignatures in the standard library\u003c/li\u003e\n\u003cli\u003eIn line with the stdlib typings in typeshed, updated \u003ccode\u003e(Base)ExceptionGroup\u003c/code\u003e generic\ntypes to define defaults for their generic arguments (defaulting to\n\u003ccode\u003eBaseExceptionGroup[BaseException]\u003c/code\u003e and \u003ccode\u003eExceptionGroup[Exception]\u003c/code\u003e)\n(PR by \u003ca href=\"https://github.com/mikenerone\"\u003e\u003ccode\u003e@​mikenerone\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eBaseExceptionGroup.__init__()\u003c/code\u003e to directly call\n\u003ccode\u003eBaseException.__init__()\u003c/code\u003e instead of the superclass \u003ccode\u003e__init__()\u003c/code\u003e in order to\nemulate the CPython behavior (broken or not) (PR by \u003ca href=\"https://github.com/cfbolz\"\u003e\u003ccode\u003e@​cfbolz\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged the \u003ccode\u003eexceptions\u003c/code\u003e attribute to always return the same tuple of exceptions,\ncreated from the original exceptions sequence passed to \u003ccode\u003eBaseExceptionGroup\u003c/code\u003e to\nmatch CPython behavior\n(\u003ccode\u003e[#143](https://github.com/agronholm/exceptiongroup/issues/143) \u0026lt;https://github.com/agronholm/exceptiongroup/issues/143\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e1.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an \u003ccode\u003eassert\u003c/code\u003e in \u003ccode\u003eexceptiongroup._formatting\u003c/code\u003e that caused compatibility\nissues with Sentry (\u003ccode\u003e[#123](https://github.com/agronholm/exceptiongroup/issues/123) \u0026lt;https://github.com/agronholm/exceptiongroup/issues/123\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e1.2.1\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated the copying of \u003ccode\u003e__notes__\u003c/code\u003e to match CPython behavior (PR by CF Bolz-Tereick)\u003c/li\u003e\n\u003cli\u003eCorrected the type annotation of the exception handler callback to accept a\n\u003ccode\u003eBaseExceptionGroup\u003c/code\u003e instead of \u003ccode\u003eBaseException\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFixed type errors on Python \u0026lt; 3.10 and the type annotation of \u003ccode\u003esuppress()\u003c/code\u003e\n(PR by John Litborn)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e1.2.0\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded special monkeypatching if \u003ccode\u003eApport \u0026lt;https://github.com/canonical/apport\u0026gt;\u003c/code\u003e_ has\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/ddddb6fdf8582c4ae5187dc1bd258115974229fe\"\u003e\u003ccode\u003eddddb6f\u003c/code\u003e\u003c/a\u003e Added the release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/49c5e60d9efad1416f4f42455e119375904a1d6d\"\u003e\u003ccode\u003e49c5e60\u003c/code\u003e\u003c/a\u003e Fixed AttributeError when formatting unpickled TBEs from an unpatched process\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/1be517f553249822a8fa12a4d7520d4b3ef15acd\"\u003e\u003ccode\u003e1be517f\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/exceptiongroup/issues/152\"\u003e#152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/af0ea2fdfe218a4c2a1cb31ebd1a61dba459af6f\"\u003e\u003ccode\u003eaf0ea2f\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/exceptiongroup/issues/149\"\u003e#149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/7c980a88a06a72db3d796d98504b335d24274abb\"\u003e\u003ccode\u003e7c980a8\u003c/code\u003e\u003c/a\u003e Removed pin on pyright version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/ef853368c8b94479adbd33cc58f1cac05839e116\"\u003e\u003ccode\u003eef85336\u003c/code\u003e\u003c/a\u003e Fixed typing job not finding Python 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/080b3f4e925bbdb8cee70cc30c5ef2937eab2bde\"\u003e\u003ccode\u003e080b3f4\u003c/code\u003e\u003c/a\u003e Pinned pyright version to fix typeshed related failure\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/ac660908a1987880eddbb249947c1eef6e08513b\"\u003e\u003ccode\u003eac66090\u003c/code\u003e\u003c/a\u003e Added Python 3.14 to the test matrix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/a0da94dadfb39c0b52c0cd5c87ace166b00f74c1\"\u003e\u003ccode\u003ea0da94d\u003c/code\u003e\u003c/a\u003e Fixed test failures on Python 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/exceptiongroup/commit/77fba8a871408ff2c48f536e5e73b1918239ba5f\"\u003e\u003ccode\u003e77fba8a\u003c/code\u003e\u003c/a\u003e Added the release version\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/exceptiongroup/compare/1.2.2...1.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fsspec` from 2026.3.0 to 2026.4.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/8fdedd1fd17be354f75f0cec1f973d93416c704b\"\u003e\u003ccode\u003e8fdedd1\u003c/code\u003e\u003c/a\u003e Merge branch 'master' of \u003ca href=\"https://github.com/fsspec/filesystem_spec\"\u003ehttps://github.com/fsspec/filesystem_spec\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/8205d0d1afecb64f34565ebeb073b7f1959a869d\"\u003e\u003ccode\u003e8205d0d\u003c/code\u003e\u003c/a\u003e Release (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2027\"\u003e#2027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/50bfba22200077fa602038857e19d58cc2541db5\"\u003e\u003ccode\u003e50bfba2\u003c/code\u003e\u003c/a\u003e Merge branch 'master' of \u003ca href=\"https://github.com/fsspec/filesystem_spec\"\u003ehttps://github.com/fsspec/filesystem_spec\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/f58bc851213ab3a87b2d26c01c9d26b291b0e1d3\"\u003e\u003ccode\u003ef58bc85\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;DEP: de-duplicate and sort optional dependencies (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2021\"\u003e#2021\u003c/a\u003e)\u0026quot; (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2026\"\u003e#2026\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/c6c7b40b7794c6e554d9dcae7bf4930bba67e403\"\u003e\u003ccode\u003ec6c7b40\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;DEP: de-duplicate and sort optional dependencies (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2021\"\u003e#2021\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/3bc67f85c3b67c5adef11af35761fd839de306fb\"\u003e\u003ccode\u003e3bc67f8\u003c/code\u003e\u003c/a\u003e DEP: de-duplicate and sort optional dependencies (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2021\"\u003e#2021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/0b290bf1336bb15d4327afcdf743d9a17b5ea762\"\u003e\u003ccode\u003e0b290bf\u003c/code\u003e\u003c/a\u003e docs: add URL handling note to HTTPFileSystem class docstring (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2024\"\u003e#2024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/b33a2d6c3b6912c645d9a315791f41e74bff4c66\"\u003e\u003ccode\u003eb33a2d6\u003c/code\u003e\u003c/a\u003e ci: install downstream systems like gcsfs before testing so the \u003ccode\u003e_version.py\u003c/code\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/e9e7a5b5eab42b6c6d0790aa0aa510f66fc44630\"\u003e\u003ccode\u003ee9e7a5b\u003c/code\u003e\u003c/a\u003e Delegate DirFileSystem delete and write_text (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2022\"\u003e#2022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/105d614a443e3f46236deb87442cc5491741687c\"\u003e\u003ccode\u003e105d614\u003c/code\u003e\u003c/a\u003e fix: use encode_url() in _pipe_file for consistency (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2023\"\u003e#2023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fsspec/filesystem_spec/compare/2026.3.0...2026.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `googleapis-common-protos` from 1.74.0 to 1.75.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\"\u003egoogleapis-common-protos's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogleapis-common-protos: v1.75.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/googleapis-common-protos-v1.74.0...googleapis-common-protos-v1.75.0\"\u003ev1.75.0\u003c/a\u003e (2026-05-06)\u003c/h2\u003e\n\u003c/blockquote\u003e\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/3997a108c45e1c1df8e844746eb2af4b1a77e154\"\u003e\u003ccode\u003e3997a10\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20260506T163115Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16964\"\u003e#16964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f655e492c0879684b60a7d06e90501dd49e96252\"\u003e\u003ccode\u003ef655e49\u003c/code\u003e\u003c/a\u003e chore: add type annotation to SYNCPOINTS (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16973\"\u003e#16973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f149bd7dd30489c3165bf03a2343dc9f75875451\"\u003e\u003ccode\u003ef149bd7\u003c/code\u003e\u003c/a\u003e refactor(bigframes): Modularize compiler routing as proxy executor (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16907\"\u003e#16907\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/19db82f5cb033215531e5b65239e45275e3ed568\"\u003e\u003ccode\u003e19db82f\u003c/code\u003e\u003c/a\u003e chore(bigframes): remove leftover support for Python \u0026lt;= 3.9 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16961\"\u003e#16961\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/2dedaacf0666ade39ae89194ad8dbc34761bd1df\"\u003e\u003ccode\u003e2dedaac\u003c/code\u003e\u003c/a\u003e chore: test CommonResource resource name alias (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16965\"\u003e#16965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/9652a08cb89441fac779eb4fa4d6f48f33b55d3b\"\u003e\u003ccode\u003e9652a08\u003c/code\u003e\u003c/a\u003e fix: pass resource aliases to file-level CommonResources (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16945\"\u003e#16945\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/78a48b040a2abc0bf19ebe267aba0a1f410df2e6\"\u003e\u003ccode\u003e78a48b0\u003c/code\u003e\u003c/a\u003e fix(google-cloud-core): Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16953\"\u003e#16953\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/5975c48186dd8798b172ac442fd55bc7fece1612\"\u003e\u003ccode\u003e5975c48\u003c/code\u003e\u003c/a\u003e fix(dns): Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16954\"\u003e#16954\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/d5bea2e99b435b8b3d75321679072db092001de6\"\u003e\u003ccode\u003ed5bea2e\u003c/code\u003e\u003c/a\u003e fix(crc32c): Drop support for Python 3.8 and 3.9 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16955\"\u003e#16955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/63f6d96c1c5569b5fdaea85dfe995ce280907b98\"\u003e\u003ccode\u003e63f6d96\u003c/code\u003e\u003c/a\u003e fix(sqlalchemy-bigquery): Drop support for Python 3.8 and 3.9 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/16956\"\u003e#16956\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/googleapis-common-protos-v1.74.0...googleapis-common-protos-v1.75.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.11 to 3.13\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.rst\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e3.13 (2026-04-22)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect classification error for codepoint U+A7F1\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e3.12 (2026-04-21)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 17.0.0.\u003c/li\u003e\n\u003cli\u003eIssue a deprecation warning for the transitional argument.\u003c/li\u003e\n\u003cli\u003eAdded lazy-loading to provide some performance improvements.\u003c/li\u003e\n\u003cli\u003eRemoved vestiges of code related to Python 2 support, including\nsegmentation of data structures specific to Jython.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Rodrigo Nogueira for contributions to this release.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/89cdfd27338896cee6b1ee18e64c96ac28684ce0\"\u003e\u003ccode\u003e89cdfd2\u003c/code\u003e\u003c/a\u003e Release v3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1eb068687543118147417a8d8a70674e2c172891\"\u003e\u003ccode\u003e1eb0686\u003c/code\u003e\u003c/a\u003e Pre-release 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5f20d1e41eea3b3873d18d83d7a384784f72a92e\"\u003e\u003ccode\u003e5f20d1e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/220\"\u003e#220\u003c/a\u003e from kjd/unicode-next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/4ea84252ab21e62a79e5a3273746112b5dcfb810\"\u003e\u003ccode\u003e4ea8425\u003c/code\u003e\u003c/a\u003e Regenerate idnadata.py with correct NFKC_CF data\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/fd47341a08bbdcffda33694211ca4de10170cd41\"\u003e\u003ccode\u003efd47341\u003c/code\u003e\u003c/a\u003e Use NFKC_CF from Unicode data files instead of Python's unicodedata module\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/a5304a4cdbd7b31595f8ac42ffdfa88f5b936467\"\u003e\u003ccode\u003ea5304a4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/219\"\u003e#219\u003c/a\u003e from kjd/release-3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d80d6f9254d699961fa2c669a1534cde9d4ee5b6\"\u003e\u003ccode\u003ed80d6f9\u003c/code\u003e\u003c/a\u003e Release v3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1bb44ddb3f2a9dcf97a6ac11aba34e5b6ed31291\"\u003e\u003ccode\u003e1bb44dd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/218\"\u003e#218\u003c/a\u003e from kjd/release-candidate-3.12rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/909c49d15b8d159be163bccc7972116baffdb47b\"\u003e\u003ccode\u003e909c49d\u003c/code\u003e\u003c/a\u003e Release candidate for 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c5459a10370f005dc09921aee3201b5a45699f9d\"\u003e\u003ccode\u003ec5459a1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/217\"\u003e#217\u003c/a\u003e from kjd/housekeeping-2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.11...v3.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jsonschema` from 4.25.1 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\u003c/blockquote\u003e\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\u003c/blockquote\u003e\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.25.1...v4.26.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-classic` from 1.0.3 to 1.0.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-classic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-classic==1.0.7\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-classic==1.0.6\u003c/p\u003e\n\u003cp\u003erelease(langchain-classic): 1.0.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37240\"\u003e#37240\u003c/a\u003e)\nchore(langchain-classic): deprecate hub, limit loads/dumps (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37234\"\u003e#37234\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-classic==1.0.6\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-classic==1.0.5\u003c/p\u003e\n\u003cp\u003erelease(langchain-classic): 1.0.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37211\"\u003e#37211\u003c/a\u003e)\nchore: bump jupyter-server from 2.17.0 to 2.18.0 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37203\"\u003e#37203\u003c/a\u003e)\nfix(langchain): restrict deserialization in \u003ccode\u003elangchain_classic.storage._lc_store\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37208\"\u003e#37208\u003c/a\u003e)\nfix(langchain): use langchain-classic version for \u003ccode\u003ehub.pull\u003c/code\u003e deprecation (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37199\"\u003e#37199\u003c/a\u003e)\nfix(core, langchain): harden \u003ccode\u003eload()\u003c/code\u003e against untrusted manifests (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37197\"\u003e#37197\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-classic==1.0.5\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-classic==1.0.4\u003c/p\u003e\n\u003cp\u003erelease(langchain-classic): 1.0.5 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37165\"\u003e#37165\u003c/a\u003e)\nrefactor(langchain-classic): retarget deprecations to \u003ccode\u003ecreate_agent\u003c/code\u003e, other chores (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37164\"\u003e#37164\u003c/a\u003e)\nchore(langchain,langchain-classic): uncomment optional deps (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37163\"\u003e#37163\u003c/a\u003e)\nchore: bump types-pyyaml from 6.0.12.20250915 to 6.0.12.20260408 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37130\"\u003e#37130\u003c/a\u003e)\nchore: bump types-pytz from 2026.1.1.20260304 to 2026.1.1.20260408 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37131\"\u003e#37131\u003c/a\u003e)\nchore: bump notebook from 7.4.5 to 7.5.6 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37104\"\u003e#37104\u003c/a\u003e)\nrelease(perplexity): 1.2.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37091\"\u003e#37091\u003c/a\u003e)\nchore(docs): update x handle references (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37081\"\u003e#37081\u003c/a\u003e)\nhotfix: bump min core versions (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36996\"\u003e#36996\u003c/a\u003e)\nrelease(openai): 1.2.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36995\"\u003e#36995\u003c/a\u003e)\nfeat(core): add content-block-centric streaming (v2) (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36834\"\u003e#36834\u003c/a\u003e)\nfix(fireworks): honor \u003ccode\u003emax_retries\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36973\"\u003e#36973\u003c/a\u003e)\nrelease(openai): 1.2.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36961\"\u003e#36961\u003c/a\u003e)\nchore: bump nbconvert from 7.17.0 to 7.17.1 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36922\"\u003e#36922\u003c/a\u003e)\nchore: bump langsmith from 0.7.13 to 0.7.31 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36812\"\u003e#36812\u003c/a\u003e)\nrelease(core): release 1.3.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36851\"\u003e#36851\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-classic==1.0.4\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-classic==1.0.3\u003c/p\u003e\n\u003cp\u003erelease(langchain-classic): 1.0.4 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36827\"\u003e#36827\u003c/a\u003e)\nchore(langchain-classic): add deprecations (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36826\"\u003e#36826\u003c/a\u003e)\nfix(langchain-classic): suppress mypy errors in compat code (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36806\"\u003e#36806\u003c/a\u003e)\nchore(deps): bump pytest to \u003ccode\u003e9.0.3\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36801\"\u003e#36801\u003c/a\u003e)\nchore: bump pytest from 9.0.2 to 9.0.3 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36718\"\u003e#36718\u003c/a\u003e)\nchore: bump pillow from 12.1.1 to 12.2.0 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36709\"\u003e#36709\u003c/a\u003e)\nchore: bump cryptography from 46.0.6 to 46.0.7 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36620\"\u003e#36620\u003c/a\u003e)\nchore: bump aiohttp from 3.13.3 to 3.13.4 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36439\"\u003e#36439\u003c/a\u003e)\nchore: pygments\u0026gt;=2.20.0 across all packages (CVE-2026-4539) (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36385\"\u003e#36385\u003c/a\u003e)\nchore: bump cryptography from 46.0.5 to 46.0.6 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36325\"\u003e#36325\u003c/a\u003e)\nchore: bump requests from 2.32.5 to 2.33.0 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36242\"\u003e#36242\u003c/a\u003e)\nfix(langchain,langchain-classic): update model provider classes for Azure AI Foundry (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/35812\"\u003e#35812\u003c/a\u003e)\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/ec9a3c15ad09c21d360c37d26f557bab631f6bf6\"\u003e\u003ccode\u003eec9a3c1\u003c/code\u003e\u003c/a\u003e release(langchain-classic): 1.0.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37240\"\u003e#37240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/3de039a46abe1f7008a45a5f6a3c35c2ce6f940d\"\u003e\u003ccode\u003e3de039a\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37231\"\u003e#37231\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/cccefce0b14e773ed3246128517f2f88add20059\"\u003e\u003ccode\u003ecccefce\u003c/code\u003e\u003c/a\u003e chore(langchain-classic): deprecate hub, limit loads/dumps (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37234\"\u003e#37234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/1519ed5afbc3bfcc7170b12baa07f1ae7e98edd0\"\u003e\u003ccode\u003e1519ed5\u003c/code\u003e\u003c/a\u003e release(langchain-classic): 1.0.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37211\"\u003e#37211\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/16b7e43ef41d1860105d3f606150742fea3acf12\"\u003e\u003ccode\u003e16b7e43\u003c/code\u003e\u003c/a\u003e chore: bump jupyter-server from 2.17.0 to 2.18.0 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37\"\u003e#37\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/ad305571ba699b4d044584f18eaa076ce9d6fbfd\"\u003e\u003ccode\u003ead30557\u003c/code\u003e\u003c/a\u003e chore: bump jupyter-server from 2.17.0 to 2.18.0 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37203\"\u003e#37203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/2ca920cf8289279869cedc5ec394b0e1f29c41da\"\u003e\u003ccode\u003e2ca920c\u003c/code\u003e\u003c/a\u003e chore: bump jupyter-server from 2.17.0 to 2.18.0 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37204\"\u003e#37204\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/c0e1d1366ea298612c4e7cebaf597b81d3c1811a\"\u003e\u003ccode\u003ec0e1d13\u003c/code\u003e\u003c/a\u003e fix(langchain): restrict deserialization in `langchain_classic.storage._lc_st...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/69fb89f873b0bf83239010960a9aacc88913daf9\"\u003e\u003ccode\u003e69fb89f\u003c/code\u003e\u003c/a\u003e fix(langchain): use langchain-classic version for \u003ccode\u003ehub.pull\u003c/code\u003e deprecation (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37\"\u003e#37\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/5039dfec1f8e78459540a7f1b52fb0d6d82e3f07\"\u003e\u003ccode\u003e5039dfe\u003c/code\u003e\u003c/a\u003e release(core): 1.3.3 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/37198\"\u003e#37198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain-classic==1.0.3...langchain-classic==1.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-text-splitters` from 1.1.1 to 1.1.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-text-splitters's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-text-splitters==1.1.2\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-text-splitters==1.1.1\u003c/p\u003e\n\u003cp\u003erelease(text-splitters): 1.1.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36822\"\u003e#36822\u003c/a\u003e)\nfix(text-splitters): deprecate and use SSRF-safe transport in split_text_from_url (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36821\"\u003e#36821\u003c/a\u003e)\nchore: bump langsmith from 0.6.3 to 0.7.31 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36797\"\u003e#36797\u003c/a\u003e)\nchore(deps): bump pytest to \u003ccode\u003e9.0.3\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36801\"\u003e#36801\u003c/a\u003e)\nchore: bump pytest from 9.0.2 to 9.0.3 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36714\"\u003e#36714\u003c/a\u003e)\nchore: add comment explaining \u003ccode\u003epygments\u0026gt;=2.20.0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36570\"\u003e#36570\u003c/a\u003e)\nrelease(core): 1.2.26 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36511\"\u003e#36511\u003c/a\u003e)\nchore: pygments\u0026gt;=2.20.0 across all packages (CVE-2026-4539) (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36385\"\u003e#36385\u003c/a\u003e)\nfix(text-splitters): prevent silent data loss for empty dict values in RecursiveJsonSplitter (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/35079\"\u003e#35079\u003c/a\u003e)\nfeat(text-splitters): support spacy tests with Python 3.14 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36198\"\u003e#36198\u003c/a\u003e)\nfix(infra): correct lint_diff relative paths in package makefiles (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36333\"\u003e#36333\u003c/a\u003e)\nchore: bump requests from 2.32.5 to 2.33.0 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langcha...\n\n_Description has been truncated_","html_url":"https://github.com/ai-code-review-2026/backend/pull/2","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-code-review-2026%2Fbackend/issues/2","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/2/packages"}},{"old_version":"\u003e=5.0.0","new_version":"\u003e=7.4.3","update_type":"minor","path":null,"pr_created_at":"2026-05-05T04:49:43.000Z","version_change":"\u003e=5.0.0 → \u003e=7.4.3","issue":{"uuid":"4381602763","node_id":"PR_kwDORgwaGs7YRBoz","number":89,"state":"closed","title":"build(deps): update chardet requirement from \u003e=5.0.0 to \u003e=7.4.3","user":"dependabot[bot]","labels":["dependencies","backend","automation","security-scan","python"],"assignees":["dependabot[bot]"],"locked":false,"comments_count":7,"pull_request":true,"closed_at":"2026-05-05T04:52:36.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-05T04:49:43.000Z","updated_at":"2026-05-05T04:52:45.000Z","time_to_close":173,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): update","packages":[{"name":"chardet","old_version":"\u003e=5.0.0","new_version":"\u003e=7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [chardet](https://github.com/chardet/chardet) 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/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore 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/BhautikVekariya21/ai-interview/pull/89","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/BhautikVekariya21%2Fai-interview/issues/89","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/89/packages"}},{"old_version":"5.2.0","new_version":"7.4.3","update_type":"major","path":"/","pr_created_at":"2026-05-03T11:57:21.000Z","version_change":"5.2.0 → 7.4.3","issue":{"uuid":"4371713539","node_id":"PR_kwDORE1nLM7XxJcD","number":100,"state":"closed","title":"build(deps): bump chardet in /","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":["mdaubie"],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-03T20:58:03.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-03T11:57:21.000Z","updated_at":"2026-05-03T20:58:11.000Z","time_to_close":32442,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps)","packages":[{"name":"chardet","old_version":"5.2.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":"/","ecosystem":"pip"},"body":"[//]: # (dependabot-start)\n⚠️  **Dependabot is rebasing this PR** ⚠️ \n\nRebasing might not happen immediately, so don't worry if this takes some time.\n\nNote: if you make any changes to this PR yourself, they will take precedence over the rebase.\n\n---\n\n[//]: # (dependabot-end)\n\nBumps the per-dependency/chardet group with 1 update: [chardet](https://github.com/chardet/chardet).\n\nUpdates `chardet` from 5.2.0 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chardet\u0026package-manager=uv\u0026previous-version=5.2.0\u0026new-version=7.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \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/mdaubie/muxwell/pull/100","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mdaubie%2Fmuxwell/issues/100","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/100/packages"}},{"old_version":"5.2.0","new_version":"7.4.3","update_type":"major","path":"/backend","pr_created_at":"2026-05-02T04:31:30.000Z","version_change":"5.2.0 → 7.4.3","issue":{"uuid":"4367913424","node_id":"PR_kwDOSSEpB87Xl_Nn","number":15,"state":"closed","title":"chore(deps)(deps): bump chardet from 5.2.0 to 7.4.3 in /backend","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-02T04:44:22.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-02T04:31:30.000Z","updated_at":"2026-05-02T04:44:24.000Z","time_to_close":772,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)(deps)","packages":[{"name":"chardet","old_version":"5.2.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps [chardet](https://github.com/chardet/chardet) from 5.2.0 to 7.4.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chardet\u0026package-manager=pip\u0026previous-version=5.2.0\u0026new-version=7.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/xr843/buddhist-text-collation/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/xr843%2Fbuddhist-text-collation/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"}},{"old_version":"7.4.1","new_version":"7.4.3","update_type":"patch","path":null,"pr_created_at":"2026-05-01T01:49:58.000Z","version_change":"7.4.1 → 7.4.3","issue":{"uuid":"4362351102","node_id":"PR_kwDORbMusc7XUSjd","number":77,"state":"open","title":"deps(backend): bump the python-minor group across 1 directory with 47 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-05-01T01:49:58.000Z","updated_at":"2026-05-01T01:51:05.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(backend): bump","group_name":"python-minor","update_count":47,"packages":[{"name":"fastapi","old_version":"0.136.0","new_version":"0.136.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"pydantic","old_version":"2.13.2","new_version":"2.13.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.13.1","new_version":"2.14.0","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"uvicorn","old_version":"0.44.0","new_version":"0.46.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"ruff","old_version":"0.15.11","new_version":"0.15.12","repository_url":"https://github.com/astral-sh/ruff"},{"name":"semgrep","old_version":"1.159.0","new_version":"1.161.0","repository_url":"https://github.com/semgrep/semgrep"},{"name":"python-multipart","old_version":"0.0.26","new_version":"0.0.27","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"langchain-core","old_version":"1.3.0","new_version":"1.3.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langgraph","old_version":"1.1.8","new_version":"1.1.9","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"anthropic","old_version":"0.96.0","new_version":"0.97.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"chardet","old_version":"7.4.1","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"click","old_version":"8.1.8","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"},{"name":"exceptiongroup","old_version":"1.2.2","new_version":"1.3.1","repository_url":"https://github.com/agronholm/exceptiongroup"},{"name":"fsspec","old_version":"2026.3.0","new_version":"2026.4.0","repository_url":"https://github.com/fsspec/filesystem_spec"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"jsonschema","old_version":"4.25.1","new_version":"4.26.0","repository_url":"https://github.com/python-jsonschema/jsonschema"},{"name":"langchain-classic","old_version":"1.0.3","new_version":"1.0.4","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-text-splitters","old_version":"1.1.1","new_version":"1.1.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langgraph-checkpoint","old_version":"4.0.1","new_version":"4.0.3","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langgraph-prebuilt","old_version":"1.0.9","new_version":"1.0.13","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langsmith","old_version":"0.7.30","new_version":"0.8.0","repository_url":"https://github.com/langchain-ai/langsmith-sdk"},{"name":"mako","old_version":"1.3.10","new_version":"1.3.12","repository_url":"https://github.com/sqlalchemy/mako"},{"name":"mcp","old_version":"1.23.3","new_version":"1.27.0","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"mpmath","old_version":"1.3.0","new_version":"1.4.1","repository_url":"https://github.com/mpmath/mpmath"},{"name":"ollama","old_version":"0.6.1","new_version":"0.6.2","repository_url":"https://github.com/ollama/ollama-python"},{"name":"opentelemetry-api","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-threading","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-sdk","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"packaging","old_version":"26.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pathspec","old_version":"1.0.4","new_version":"1.1.1","repository_url":"https://github.com/cpburnz/python-pathspec"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.46.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"ruamel-yaml-clib","old_version":"0.2.14","new_version":"0.2.15"},{"name":"sse-starlette","old_version":"3.3.4","new_version":"3.4.1","repository_url":"https://github.com/sysid/sse-starlette"},{"name":"tokenizers","old_version":"0.22.2","new_version":"0.23.1","repository_url":"https://github.com/huggingface/tokenizers"},{"name":"tomli","old_version":"2.0.2","new_version":"2.4.1","repository_url":"https://github.com/hukkin/tomli"},{"name":"torch","old_version":"2.10.0","new_version":"2.11.0","repository_url":"https://github.com/pytorch/pytorch"},{"name":"tzdata","old_version":"2026.1","new_version":"2026.2","repository_url":"https://github.com/python/tzdata"},{"name":"xxhash","old_version":"3.6.0","new_version":"3.7.0","repository_url":"https://github.com/ifduyue/python-xxhash"},{"name":"zipp","old_version":"3.23.0","new_version":"3.23.1","repository_url":"https://github.com/jaraco/zipp"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor group with 47 updates in the /apps/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.0` | `0.136.1` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.2` | `2.13.3` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.13.1` | `2.14.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.44.0` | `0.46.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.11` | `0.15.12` |\n| [semgrep](https://github.com/semgrep/semgrep) | `1.159.0` | `1.161.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.26` | `0.0.27` |\n| [langchain-core](https://github.com/langchain-ai/langchain) | `1.3.0` | `1.3.2` |\n| [langgraph](https://github.com/langchain-ai/langgraph) | `1.1.8` | `1.1.9` |\n| [anthropic](https://github.com/anthropics/anthropic-sdk-python) | `0.96.0` | `0.97.0` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.4.22` |\n| [chardet](https://github.com/chardet/chardet) | `7.4.1` | `7.4.3` |\n| [click](https://github.com/pallets/click) | `8.1.8` | `8.3.3` |\n| [exceptiongroup](https://github.com/agronholm/exceptiongroup) | `1.2.2` | `1.3.1` |\n| [fsspec](https://github.com/fsspec/filesystem_spec) | `2026.3.0` | `2026.4.0` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.13` |\n| [jsonschema](https://github.com/python-jsonschema/jsonschema) | `4.25.1` | `4.26.0` |\n| [langchain-classic](https://github.com/langchain-ai/langchain) | `1.0.3` | `1.0.4` |\n| [langchain-text-splitters](https://github.com/langchain-ai/langchain) | `1.1.1` | `1.1.2` |\n| [langgraph-checkpoint](https://github.com/langchain-ai/langgraph) | `4.0.1` | `4.0.3` |\n| [langgraph-prebuilt](https://github.com/langchain-ai/langgraph) | `1.0.9` | `1.0.13` |\n| [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.7.30` | `0.8.0` |\n| [mako](https://github.com/sqlalchemy/mako) | `1.3.10` | `1.3.12` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.23.3` | `1.27.0` |\n| [mpmath](https://github.com/mpmath/mpmath) | `1.3.0` | `1.4.1` |\n| [ollama](https://github.com/ollama/ollama-python) | `0.6.1` | `0.6.2` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-instrumentation-threading](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.58b0` | `0.62b1` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.2` |\n| [pathspec](https://github.com/cpburnz/python-pathspec) | `1.0.4` | `1.1.1` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.46.3` |\n| ruamel-yaml-clib | `0.2.14` | `0.2.15` |\n| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.3.4` | `3.4.1` |\n| [tokenizers](https://github.com/huggingface/tokenizers) | `0.22.2` | `0.23.1` |\n| [tomli](https://github.com/hukkin/tomli) | `2.0.2` | `2.4.1` |\n| [torch](https://github.com/pytorch/pytorch) | `2.10.0` | `2.11.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.1` | `2026.2` |\n| [xxhash](https://github.com/ifduyue/python-xxhash) | `3.6.0` | `3.7.0` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.0` | `3.23.1` |\n\n\nUpdates `fastapi` from 0.136.0 to 0.136.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.136.1\u003c/h2\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Update Pydantic v2 code to address deprecations. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15101\"\u003e#15101\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔨 Tweak translation script. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15174\"\u003e#15174\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 mkdocs-material from 9.7.1 to 9.7.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15408\"\u003e#15408\u003c/a\u003e by \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 inline-snapshot from 0.31.1 to 0.32.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15409\"\u003e#15409\u003c/a\u003e by \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 pytest-codspeed from 4.3.0 to 4.4.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15407\"\u003e#15407\u003c/a\u003e by \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 pytest-cov from 7.0.0 to 7.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15406\"\u003e#15406\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.14.1 to 3.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15405\"\u003e#15405\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump mypy from 1.19.1 to 1.20.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15410\"\u003e#15410\u003c/a\u003e by \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 python-dotenv from 1.2.1 to 1.2.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15400\"\u003e#15400\u003c/a\u003e by \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 0.52.1 to 1.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15397\"\u003e#15397\u003c/a\u003e by \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 pygithub from 2.8.1 to 2.9.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15396\"\u003e#15396\u003c/a\u003e by \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.12.0 to 2.12.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15393\"\u003e#15393\u003c/a\u003e by \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 zizmor from 1.23.1 to 1.24.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15394\"\u003e#15394\u003c/a\u003e by \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 strawberry-graphql from 0.312.3 to 0.314.3. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15395\"\u003e#15395\u003c/a\u003e by \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 python-multipart from 0.0.22 to 0.0.26. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15360\"\u003e#15360\u003c/a\u003e by \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 authlib from 1.6.9 to 1.6.11. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15373\"\u003e#15373\u003c/a\u003e by \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 aiohttp from 3.13.3 to 3.13.4. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15282\"\u003e#15282\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pygments from 2.19.2 to 2.20.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15263\"\u003e#15263\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 10.20.1 to 10.21.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15391\"\u003e#15391\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 pillow from 12.1.1 to 12.2.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15333\"\u003e#15333\u003c/a\u003e by \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 pytest from 9.0.2 to 9.0.3. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15334\"\u003e#15334\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/upload-artifact from 7.0.0 to 7.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15374\"\u003e#15374\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/cache from 5.0.4 to 5.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15385\"\u003e#15385\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove Zuplo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15369\"\u003e#15369\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove Speakeasy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15368\"\u003e#15368\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Add zizmor and fix audit findings. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15316\"\u003e#15316\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\u003c/blockquote\u003e\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/e54e5a8980ffa6d7ff68ee7b25a1c46036375521\"\u003e\u003ccode\u003ee54e5a8\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9a8a5fd99902c3b80d4cc94b85e120e2b808825f\"\u003e\u003ccode\u003e9a8a5fd\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7815a32f2ed177b8b786a48b3e0712c05b5c644f\"\u003e\u003ccode\u003e7815a32\u003c/code\u003e\u003c/a\u003e ⬆️ Update Pydantic v2 code to address deprecations (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15101\"\u003e#15101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ef1c927b0558d414e199a666833942a6fabb3a51\"\u003e\u003ccode\u003eef1c927\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/38039e12a86e67f2001b9b7d96c219691d6cb4af\"\u003e\u003ccode\u003e38039e1\u003c/code\u003e\u003c/a\u003e 🔨 Tweak translation script (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15174\"\u003e#15174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4fa826ce0a3b16884a04f51e5aac95d01790b599\"\u003e\u003ccode\u003e4fa826c\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c39415673e621665fdb7bbdde69beba7eb1dfd12\"\u003e\u003ccode\u003ec394156\u003c/code\u003e\u003c/a\u003e ⬆ Bump mkdocs-material from 9.7.1 to 9.7.6 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15408\"\u003e#15408\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ae230ad2f9d90a4e3f6222ff1a5d6e8da41ec0ad\"\u003e\u003ccode\u003eae230ad\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/d9eb39d1a1bf2f6e6e5d3a55088f61c712cb864e\"\u003e\u003ccode\u003ed9eb39d\u003c/code\u003e\u003c/a\u003e ⬆ Bump inline-snapshot from 0.31.1 to 0.32.6 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15409\"\u003e#15409\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4f8b5d14d324ae8e15cfae8d85adb4186d4c2175\"\u003e\u003ccode\u003e4f8b5d1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.0...0.136.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.2 to 2.13.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/9e9a11132c980c4ec84ff6d2df06d4c1a55ca8f3\"\u003e\u003ccode\u003e9e9a111\u003c/code\u003e\u003c/a\u003e Fix backported test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1ec8c6aa0cae1c78409c6f31af738a24e16c7124\"\u003e\u003ccode\u003e1ec8c6a\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/fb4f2044436e9fa4ff9745479ce263016a99c4d6\"\u003e\u003ccode\u003efb4f204\u003c/code\u003e\u003c/a\u003e Handle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.13.1 to 2.14.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.14.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix parsing env vars into Optional Strict types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/792\"\u003epydantic/pydantic-settings#792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RecursionError with mutually recursive models in CLI by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/794\"\u003epydantic/pydantic-settings#794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix env_file from model_config ignored in CliApp.run() (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/795\"\u003e#795\u003c/a\u003e) by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/796\"\u003epydantic/pydantic-settings#796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/798\"\u003epydantic/pydantic-settings#798\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/801\"\u003epydantic/pydantic-settings#801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump samuelcolvin/check-python-version from 4.1 to 5 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 4 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/803\"\u003epydantic/pydantic-settings#803\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 4 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/804\"\u003epydantic/pydantic-settings#804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 5 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/805\"\u003epydantic/pydantic-settings#805\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python from 5 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/806\"\u003epydantic/pydantic-settings#806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore chardet and group GitHub Actions in Dependabot by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/808\"\u003epydantic/pydantic-settings#808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/download-artifact from 4 to 8 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/809\"\u003epydantic/pydantic-settings#809\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/810\"\u003epydantic/pydantic-settings#810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport reading .env files from FIFOs (e.g. 1Password Environments) by \u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AliasChoices ignored when changing provider priority by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/813\"\u003epydantic/pydantic-settings#813\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve KeyError in run_subcommand for underscore field names by \u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/814\"\u003epydantic/pydantic-settings#814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eLiteral[numeric Enum]\u003c/code\u003e coercion for CLI and env vars by \u003ca href=\"https://github.com/m9810223\"\u003e\u003ccode\u003e@​m9810223\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/811\"\u003epydantic/pydantic-settings#811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nested discriminated unions not discovered by env/CLI providers by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/816\"\u003epydantic/pydantic-settings#816\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/820\"\u003epydantic/pydantic-settings#820\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCLI ensure env nested max split internally. by \u003ca href=\"https://github.com/kschwab\"\u003e\u003ccode\u003e@​kschwab\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/821\"\u003epydantic/pydantic-settings#821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/824\"\u003epydantic/pydantic-settings#824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eboto3-stubs\u003c/code\u003e to \u003ccode\u003etypes-boto3\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/831\"\u003epydantic/pydantic-settings#831\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI not recognizing field name with validate_by_name and AliasChoices by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/826\"\u003epydantic/pydantic-settings#826\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow customisation of the dotevn setting source to filter variables by \u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/833\"\u003epydantic/pydantic-settings#833\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce yamlfmt by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/836\"\u003epydantic/pydantic-settings#836\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump boto3 from 1.42.82 to 1.42.83 in the python-packages group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/837\"\u003epydantic/pydantic-settings#837\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce zizmor by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/838\"\u003epydantic/pydantic-settings#838\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CliPositionalArg[list[CustomType]] crash for custom types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/839\"\u003epydantic/pydantic-settings#839\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/842\"\u003epydantic/pydantic-settings#842\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/844\"\u003epydantic/pydantic-settings#844\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/847\"\u003epydantic/pydantic-settings#847\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to \u003ccode\u003ejson_schema_extra\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/843\"\u003epydantic/pydantic-settings#843\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.0 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/848\"\u003epydantic/pydantic-settings#848\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\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.13.1...v2.14.0\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.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/pydantic/pydantic-settings/commit/8916beeecc6d0510e3d0532a0ed839937400ddc3\"\u003e\u003ccode\u003e8916bee\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/848\"\u003e#848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/39e551c0910c85505b608ff85a103b2c9f7396c5\"\u003e\u003ccode\u003e39e551c\u003c/code\u003e\u003c/a\u003e Fix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to `json_schema_...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9ed7f48ea2c90f436a03b01f721fe6656c869b14\"\u003e\u003ccode\u003e9ed7f48\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/847\"\u003e#847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/617c690fb16c95eb0fb98fc88c0d6d82b9af4fa9\"\u003e\u003ccode\u003e617c690\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/844\"\u003e#844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/577c05f7e8ac25904da2381db51ed4ddd4b3e4fe\"\u003e\u003ccode\u003e577c05f\u003c/code\u003e\u003c/a\u003e Add note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/842\"\u003e#842\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/2355bc54e9d442ca7916f02de28d0c936e75441c\"\u003e\u003ccode\u003e2355bc5\u003c/code\u003e\u003c/a\u003e Fix CliPositionalArg[list[CustomType]] crash for custom types (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/839\"\u003e#839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/16bd6fd230d6280d52db6ce2a0ffef8f908cc89d\"\u003e\u003ccode\u003e16bd6fd\u003c/code\u003e\u003c/a\u003e Introduce zizmor (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/838\"\u003e#838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/df8b239fe09ba712767bdf378bc90627df375f04\"\u003e\u003ccode\u003edf8b239\u003c/code\u003e\u003c/a\u003e Bump boto3 from 1.42.82 to 1.42.83 in the python-packages group (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/837\"\u003e#837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c5401a27999cd6c0e93925deb0660cd51013c8b1\"\u003e\u003ccode\u003ec5401a2\u003c/code\u003e\u003c/a\u003e Introduce yamlfmt (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/836\"\u003e#836\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/953e28e6cfe9a9e536375d771a4ffd48535a4ab2\"\u003e\u003ccode\u003e953e28e\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/833\"\u003e#833\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.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.44.0 to 0.46.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.46.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2915\"\u003eKludex/uvicorn#2915\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2916\"\u003eKludex/uvicorn#2916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2917\"\u003eKludex/uvicorn#2917\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.45.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2903\"\u003eKludex/uvicorn#2903\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2905\"\u003eKludex/uvicorn#2905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2907\"\u003eKludex/uvicorn#2907\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2906\"\u003eKludex/uvicorn#2906\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert empty context for ASGI runs by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2911\"\u003eKludex/uvicorn#2911\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2912\"\u003eKludex/uvicorn#2912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2913\"\u003eKludex/uvicorn#2913\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Krishnachaitanyakc\"\u003e\u003ccode\u003e@​Krishnachaitanyakc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2870\"\u003eKludex/uvicorn#2870\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.46.0 (April 23, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2916\"\u003e#2916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2917\"\u003e#2917\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.45.0 (April 21, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2905\"\u003e#2905\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2913\"\u003e#2913\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Explicitly start ASGI run with empty context\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2903\"\u003e#2903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2906\"\u003e#2906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b224045f5900b7f766743bcb16ba9fc3adea2606\"\u003e\u003ccode\u003eb224045\u003c/code\u003e\u003c/a\u003e Version 0.46.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2918\"\u003e#2918\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7375b5bf66d962186d663e85615d4b4d956bf880\"\u003e\u003ccode\u003e7375b5b\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/d438fb16fe2d23c7bbc2ca7094645cff1f116458\"\u003e\u003ccode\u003ed438fb1\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3e6b96446653d0156434bce529a14c80764c9eda\"\u003e\u003ccode\u003e3e6b964\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2c423bd82be169459ea254a61476de34767e0326\"\u003e\u003ccode\u003e2c423bd\u003c/code\u003e\u003c/a\u003e Version 0.45.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7f027f8e25e47668a9c2ce8b5c21b35054c48d02\"\u003e\u003ccode\u003e7f027f8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/73a80c3cc87de269ed016e584a25e585ae6f2b44\"\u003e\u003ccode\u003e73a80c3\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45c0b568d38e9bf4f2f036bc2d79eb98b0e72f72\"\u003e\u003ccode\u003e45c0b56\u003c/code\u003e\u003c/a\u003e Revert empty context for ASGI runs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/850d92656de0cb5859ee5f6ba252e19ad3d38989\"\u003e\u003ccode\u003e850d926\u003c/code\u003e\u003c/a\u003e Raise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2906\"\u003e#2906\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/fdcacb4b83bc686ea1ba9e50ffe5b8cfe49b3e00\"\u003e\u003ccode\u003efdcacb4\u003c/code\u003e\u003c/a\u003e Accept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.44.0...0.46.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.11 to 0.15.12\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.12\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-04-24.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:ignore\u003c/code\u003e logical-line suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23404\"\u003e#23404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert preview changes to displayed diagnostic severity in LSP (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24789\"\u003e#24789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003etask-branch-as-short-circuit\u003c/code\u003e (\u003ccode\u003eAIR004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23579\"\u003e#23579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix \u003ccode\u003ebreak\u003c/code\u003e/\u003ccode\u003econtinue\u003c/code\u003e handling in \u003ccode\u003eloop-iterator-mutation\u003c/code\u003e (\u003ccode\u003eB909\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24440\"\u003e#24440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLC2701\u003c/code\u003e for type parameter scopes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24576\"\u003e#24576\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epandas-vet\u003c/code\u003e] Suggest \u003ccode\u003e.array\u003c/code\u003e as well in \u003ccode\u003ePD011\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24805\"\u003e#24805\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRespect default Unix permissions for cache files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24794\"\u003e#24794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLR0124\u003c/code\u003e description not to claim self-comparison always returns the same value (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24749\"\u003e#24749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Expand docs on reusable \u003ccode\u003eTypeVar\u003c/code\u003es and scoping (\u003ccode\u003eUP046\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24153\"\u003e#24153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove rules table accessibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24711\"\u003e#24711\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylwil3\"\u003e\u003ccode\u003e@​dylwil3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/woodruffw\"\u003e\u003ccode\u003e@​woodruffw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/avasis-ai\"\u003e\u003ccode\u003e@​avasis-ai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dev-iL\"\u003e\u003ccode\u003e@​Dev-iL\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/denyszhak\"\u003e\u003ccode\u003e@​denyszhak\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/amyreese\"\u003e\u003ccode\u003e@​amyreese\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/majiayu000\"\u003e\u003ccode\u003e@​majiayu000\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.12\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.12\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-04-24.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:ignore\u003c/code\u003e logical-line suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23404\"\u003e#23404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert preview changes to displayed diagnostic severity in LSP (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24789\"\u003e#24789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003etask-branch-as-short-circuit\u003c/code\u003e (\u003ccode\u003eAIR004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23579\"\u003e#23579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix \u003ccode\u003ebreak\u003c/code\u003e/\u003ccode\u003econtinue\u003c/code\u003e handling in \u003ccode\u003eloop-iterator-mutation\u003c/code\u003e (\u003ccode\u003eB909\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24440\"\u003e#24440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLC2701\u003c/code\u003e for type parameter scopes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24576\"\u003e#24576\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epandas-vet\u003c/code\u003e] Suggest \u003ccode\u003e.array\u003c/code\u003e as well in \u003ccode\u003ePD011\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24805\"\u003e#24805\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRespect default Unix permissions for cache files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24794\"\u003e#24794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLR0124\u003c/code\u003e description not to claim self-comparison always returns the same value (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24749\"\u003e#24749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Expand docs on reusable \u003ccode\u003eTypeVar\u003c/code\u003es and scoping (\u003ccode\u003eUP046\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24153\"\u003e#24153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove rules table accessibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24711\"\u003e#24711\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylwil3\"\u003e\u003ccode\u003e@​dylwil3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/woodruffw\"\u003e\u003ccode\u003e@​woodruffw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/avasis-ai\"\u003e\u003ccode\u003e@​avasis-ai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dev-iL\"\u003e\u003ccode\u003e@​Dev-iL\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/denyszhak\"\u003e\u003ccode\u003e@​denyszhak\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/amyreese\"\u003e\u003ccode\u003e@​amyreese\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/majiayu000\"\u003e\u003ccode\u003e@​majiayu000\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/66f93cf7ed4d36325f35a452e4afa28268fbcd28\"\u003e\u003ccode\u003e66f93cf\u003c/code\u003e\u003c/a\u003e Bump 0.15.12 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24815\"\u003e#24815\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/476a4d02e8e3b6c157ac39979d8b698a1b6baa91\"\u003e\u003ccode\u003e476a4d0\u003c/code\u003e\u003c/a\u003e [ty] Complete support for more detailed diagnostics on possibly unbound error...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ed669eab30095d6c51fe6cdef6050fb01276bcb3\"\u003e\u003ccode\u003eed669ea\u003c/code\u003e\u003c/a\u003e Implement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e73d952e43feb51356ee740c5a973fce81396ff6\"\u003e\u003ccode\u003ee73d952\u003c/code\u003e\u003c/a\u003e [ty] Include inferred type in \u003ccode\u003einvalid-key\u003c/code\u003e concise diagnostic for union/inte...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/80feb29b31cd98c093316df2e0407b0c70c01b55\"\u003e\u003ccode\u003e80feb29\u003c/code\u003e\u003c/a\u003e [ty] report only dead annotation-only locals as unused (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24811\"\u003e#24811\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0fbf2bc27336a3d17d39af52cf89b78dcda8c7c8\"\u003e\u003ccode\u003e0fbf2bc\u003c/code\u003e\u003c/a\u003e Drop deprecated license classifier (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24808\"\u003e#24808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/43b174cc7f2fcb0080bb1d4843cd4bf6b72bbe27\"\u003e\u003ccode\u003e43b174c\u003c/code\u003e\u003c/a\u003e [ty] Infer lambda parameter types with \u003ccode\u003eCallable\u003c/code\u003e type context (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24317\"\u003e#24317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4f449ae4a2377569330a5ab94799d389357b5a3f\"\u003e\u003ccode\u003e4f449ae\u003c/code\u003e\u003c/a\u003e [ty] Add error context for intersection types (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24772\"\u003e#24772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/5b4e753acb46e96ad408e4904c15308e33efe307\"\u003e\u003ccode\u003e5b4e753\u003c/code\u003e\u003c/a\u003e [ty] Add support for goto in literal enum member inlay hint (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24792\"\u003e#24792\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e7cc76275a758ce1c636ea1c2d091fd576aac794\"\u003e\u003ccode\u003ee7cc762\u003c/code\u003e\u003c/a\u003e [ty] Add error context for TypedDict assignments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24790\"\u003e#24790\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.11...0.15.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `semgrep` from 1.159.0 to 1.161.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.161.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.161.0\"\u003e1.161.0\u003c/a\u003e - 2026-04-22\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala 3.4+ trait parameters are now parsed correctly. (lang-73)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSemgrep's HTTP requests no longer log URLs above the debug level; full request\ndetails remain available when running with \u003ccode\u003eSEMGREP_LOG_SRCS=cohttp.client\u003c/code\u003e. (ENGINE-2712)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.160.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.160.0\"\u003e1.160.0\u003c/a\u003e - 2026-04-16\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala: Added tree-sitter parser for improved parsing accuracy with pfff fallback. (LANG-255)\u003c/li\u003e\n\u003cli\u003epro: taint: Improved support for variadic functions (LANG-375)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed performance issues during parsing Semgrep rules containing emoji or\nother non-BMP Unicode characters. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6070\"\u003egh-6070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning when semgrep-core rule validation fails and falls back to JSON\nschema validation, alongside details of the failure. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6071\"\u003egh-6071\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/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.161.0\"\u003e1.161.0\u003c/a\u003e - 2026-04-22\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala 3.4+ trait parameters are now parsed correctly. (lang-73)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSemgrep's HTTP requests no longer log URLs above the debug level; full request\ndetails remain available when running with \u003ccode\u003eSEMGREP_LOG_SRCS=cohttp.client\u003c/code\u003e. (ENGINE-2712)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.160.0\"\u003e1.160.0\u003c/a\u003e - 2026-04-16\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala: Added tree-sitter parser for improved parsing accuracy with pfff fallback. (LANG-255)\u003c/li\u003e\n\u003cli\u003epro: taint: Improved support for variadic functions (LANG-375)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed performance issues during parsing Semgrep rules containing emoji or\nother non-BMP Unicode characters. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6070\"\u003egh-6070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning when semgrep-core rule validation fails and falls back to JSON\nschema validation, alongside details of the failure. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6071\"\u003egh-6071\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/semgrep/semgrep/commit/34b079df03bd8ed6860552adf3905cc5d146dc4d\"\u003e\u003ccode\u003e34b079d\u003c/code\u003e\u003c/a\u003e chore: release version 1.161.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/1e6302b4fde5950a805bf5c0abd7d879f11b9f6b\"\u003e\u003ccode\u003e1e6302b\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6115\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/9859b4e2e73cff0211d3b4463fe96ab334989c68\"\u003e\u003ccode\u003e9859b4e\u003c/code\u003e\u003c/a\u003e http_helpers: \u003ccode\u003escrub_uri\u003c/code\u003e for safer URI logging (semgrep/semgrep-proprietary#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/e2916c14861468bc7e2cee1f8b5276a76b91452c\"\u003e\u003ccode\u003ee2916c1\u003c/code\u003e\u003c/a\u003e scrub URLs from http_helpers logs and returned errors (semgrep/semgrep-propri...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/341da2a7ed8510686d9c43e69e6c396c54bb1dc3\"\u003e\u003ccode\u003e341da2a\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6099\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/eae9a00ede6425c3f8c9be3b2f5b78d7b92ec91b\"\u003e\u003ccode\u003eeae9a00\u003c/code\u003e\u003c/a\u003e fix: correct \u003ccode\u003eis_obrace\u003c/code\u003e to \u003ccode\u003eis_cbrace\u003c/code\u003e for closing brace count (semgrep/semg...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/d668b7179b3b3dbb210f35518595d242c667bea2\"\u003e\u003ccode\u003ed668b71\u003c/code\u003e\u003c/a\u003e chore(backend): deprecate scan endpoint v1 for semgrep ci (semgrep/semgrep-pr...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/d981dbfdf752e9cf9bc8a1a4f177b3d05a32c944\"\u003e\u003ccode\u003ed981dbf\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6098\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/2ee8536b33fad02ab3b63868014a72583ad108a6\"\u003e\u003ccode\u003e2ee8536\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6102\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/00fa4efaa465f3a58a18b511a4b12a165620069c\"\u003e\u003ccode\u003e00fa4ef\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6097\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/semgrep/semgrep/compare/v1.159.0...v1.161.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-multipart` from 0.0.26 to 0.0.27\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.27\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePass parse offsets via constructors by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/268\"\u003eKludex/python-multipart#268\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd multipart header limits by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/267\"\u003eKludex/python-multipart#267\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\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.27 (2026-04-27)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd multipart header limits \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/267\"\u003e#267\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePass parse offsets via constructors \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/268\"\u003e#268\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/6d1d6892a6b01b25da6f3e7b097e8e06c57fb250\"\u003e\u003ccode\u003e6d1d689\u003c/code\u003e\u003c/a\u003e Version 0.0.27 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/272\"\u003e#272\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/0b10220b1555af068a2bc8b198022b1ae238200f\"\u003e\u003ccode\u003e0b10220\u003c/code\u003e\u003c/a\u003e Run CI on main branch pull requests (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/271\"\u003e#271\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/3e64f5f8caba0e5d391b0c1ad0f1c2edf9e8f911\"\u003e\u003ccode\u003e3e64f5f\u003c/code\u003e\u003c/a\u003e Add multipart header limits (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/267\"\u003e#267\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/eb109cc4eb8174f2a7efc1ba894b1bf6425c0b14\"\u003e\u003ccode\u003eeb109cc\u003c/code\u003e\u003c/a\u003e Pass parse offsets via constructors (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/268\"\u003e#268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/78e29abb9a339598975beee093a770ec3033f76d\"\u003e\u003ccode\u003e78e29ab\u003c/code\u003e\u003c/a\u003e Bump pytest from 9.0.2 to 9.0.3 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/266\"\u003e#266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b2ddd0982bdf0fe852e4f3baa12122d2827af46c\"\u003e\u003ccode\u003eb2ddd09\u003c/code\u003e\u003c/a\u003e fuzz: Enhance fuzzing capabilities with new chunked and boundary tests (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/264\"\u003e#264\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-core` from 1.3.0 to 1.3.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-core's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-core==1.3.2\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-core==1.3.1\u003c/p\u003e\n\u003cp\u003erelease(core): 1.3.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36990\"\u003e#36990\u003c/a\u003e)\nfeat(core): add content-block-centric streaming (v2) (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36834\"\u003e#36834\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-core==1.3.1\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-core==1.3.0\u003c/p\u003e\n\u003cp\u003erelease(core): 1.3.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36972\"\u003e#36972\u003c/a\u003e)\nfeat(core): allow _format_output to pass through list of ToolOutputMixin instances (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36963\"\u003e#36963\u003c/a\u003e)\nchore: bump nbconvert from 7.17.0 to 7.17.1 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36923\"\u003e#36923\u003c/a\u003e)\nfeat(core): Update inheritance behavior for tracer metadata for special keys (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36900\"\u003e#36900\u003c/a\u003e)\nchore: bump langsmith from 0.7.13 to 0.7.31 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36813\"\u003e#36813\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/fa0f0d8efa54005b9256f8d4b28d1ff770372901\"\u003e\u003ccode\u003efa0f0d8\u003c/code\u003e\u003c/a\u003e release(core): 1.3.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36990\"\u003e#36990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/9ce72eba9f6b3961d469a70b1b1980543f4cca91\"\u003e\u003ccode\u003e9ce72eb\u003c/code\u003e\u003c/a\u003e feat(core): add content-block-centric streaming (v2) (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36834\"\u003e#36834\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/889a45b664638ef646fa58257cfe263d44cb6c6a\"\u003e\u003ccode\u003e889a45b\u003c/code\u003e\u003c/a\u003e ci(infra): overlay local \u003ccode\u003elangchain-*\u003c/code\u003e installs for external partners (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36989\"\u003e#36989\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/ffaac42bf9e345ec1096d38965f36542a7b0467a\"\u003e\u003ccode\u003effaac42\u003c/code\u003e\u003c/a\u003e ci(infra): add \u003ccode\u003epytest-xdist\u003c/code\u003e to partner test groups (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36988\"\u003e#36988\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/cc2feb1aea239556fa427fd8bdabbae60f8279a6\"\u003e\u003ccode\u003ecc2feb1\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36982\"\u003e#36982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/3dd0ad958eb2d5a51a4055e104598bb26aeb3b65\"\u003e\u003ccode\u003e3dd0ad9\u003c/code\u003e\u003c/a\u003e release(fireworks): 1.2.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36978\"\u003e#36978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/7b09eb7bda4dbe99615ff5e5f74539aea682d718\"\u003e\u003ccode\u003e7b09eb7\u003c/code\u003e\u003c/a\u003e fix(fireworks): honor \u003ccode\u003emax_retries\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36973\"\u003e#36973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/d30ef8a8aa2edd47c614838c6be362456be5c2a5\"\u003e\u003ccode\u003ed30ef8a\u003c/code\u003e\u003c/a\u003e feat(fireworks): populate \u003ccode\u003eusage_metadata\u003c/code\u003e on streaming (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36977\"\u003e#36977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/2715a7499a642c99901e6cfe5e9a6ea3aecedb0f\"\u003e\u003ccode\u003e2715a74\u003c/code\u003e\u003c/a\u003e fix(fireworks): swap undeployed Kimi K2 slug in integration tests (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36975\"\u003e#36975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/2d3b49162caca316d9a24286421737471ea9e388\"\u003e\u003ccode\u003e2d3b491\u003c/code\u003e\u003c/a\u003e ci(infra): shorten working-directory dropdown labels (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36974\"\u003e#36974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain-core==1.3.0...langchain-core==1.3.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langgraph` from 1.1.8 to 1.1.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langgraph/releases\"\u003elanggraph's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elanggraph==1.1.9\u003c/h2\u003e\n\u003cp\u003eChanges since 1.1.8\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003echore(langgraph): bump version 1.1.8 -\u0026gt; 1.1.9 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7563\"\u003e#7563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): don't propagate ReplayState to subgraphs on plain resume (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7561\"\u003e#7561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(langgraph): undo unnecessary changes in stream handler (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7536\"\u003e#7536\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/a529b9bede1f1b6ecada4f0cc0e5c4b83526e563\"\u003e\u003ccode\u003ea529b9b\u003c/code\u003e\u003c/a\u003e chore(langgraph): bump version 1.1.8 -\u0026gt; 1.1.9 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7563\"\u003e#7563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/0a26b471d34da94186bee8c48d0c463b5a3bd0a0\"\u003e\u003ccode\u003e0a26b47\u003c/code\u003e\u003c/a\u003e fix(langgraph): don't propagate ReplayState to subgraphs on plain resume (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7561\"\u003e#7561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/b674dd46228b0928a6bc0ad9a3d8e38ef28f6895\"\u003e\u003ccode\u003eb674dd4\u003c/code\u003e\u003c/a\u003e feat(prebuilt): expose available tools on ToolRuntime (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7512\"\u003e#7512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/8df0a377d00839bee0b7e9645b225716db8958d1\"\u003e\u003ccode\u003e8df0a37\u003c/code\u003e\u003c/a\u003e chore(langgraph): undo unnecessary changes in stream handler (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7536\"\u003e#7536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/216cf33a54d401d80338e2a0d22827b63310a3e0\"\u003e\u003ccode\u003e216cf33\u003c/code\u003e\u003c/a\u003e chore(deps): bump the pip group across 3 directories with 1 update (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7537\"\u003e#7537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/langchain-ai/langgraph/compare/1.1.8...1.1.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anthropic` from 0.96.0 to 0.97.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/releases\"\u003eanthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.97.0\u003c/h2\u003e\n\u003ch2\u003e0.97.0 (2026-04-23)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.96.0...v0.97.0\"\u003ev0.96.0...v0.97.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e CMA Memory public beta (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/fc30ebe5ca81204faa0b1d756b61dad176e37dcb\"\u003efc30ebe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix errors in api spec (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f946de8da00748b472489e93ab4920d64d1cb22d\"\u003ef946de8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore missing features (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/72212ab8408af389981e9e6b111c00460b2b17e4\"\u003e72212ab\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e optimize file structure copying in multipart requests (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/1f9eed3a953c8cef0967df8470e04f7ac8fe3235\"\u003e1f9eed3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd missing import (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/4b12f5e0f4c29a234cd05f93c603b9cae2011aaa\"\u003e4b12f5e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e more robust bootstrap script (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/7ed737089d1f28385ee827f601ba81f1935d0b6a\"\u003e7ed7370\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.22.1 (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a4b7184e57410ae92a409db5ee6fec90edceaa51\"\u003ea4b7184\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md\"\u003eanthropic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.97.0 (2026-04-23)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.96.0...v0.97.0\"\u003ev0.96.0...v0.97.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e CMA Memory public beta (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/fc30ebe5ca81204faa0b1d756b61dad176e37dcb\"\u003efc30ebe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix errors in api spec (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f946de8da00748b472489e93ab4920d64d1cb22d\"\u003ef946de8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore missing features (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/72212ab8408af389981e9e6b111c00460b2b17e4\"\u003e72212ab\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e optimize file structure copying in multipart requests (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/1f9eed3a953c8cef0967df8470e04f7ac8fe3235\"\u003e1f9eed3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd missing import (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/4b12f5e0f4c29a234cd05f93c603b9cae2011aaa\"\u003e4b12f5e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e more robust bootstrap script (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/7ed737089d1f28385ee827f601ba81f1935d0b6a\"\u003e7ed7370\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.22.1 (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a4b7184e57410ae92a409db5ee6fec90edceaa51\"\u003ea4b7184\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/78c73600b714fcb036893768df8ee122f33d4cb3\"\u003e\u003ccode\u003e78c7360\u003c/code\u003e\u003c/a\u003e release: 0.97.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d274533036e250506f665011d8d3441ed5228944\"\u003e\u003ccode\u003ed274533\u003c/code\u003e\u003c/a\u003e chore: add missing import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/c078db11d55c5b0455272e85617d8c1cfe76180e\"\u003e\u003ccode\u003ec078db1\u003c/code\u003e\u003c/a\u003e fix(api): fix errors in api spec\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5807d0efd8fac5fb7323dbd8949a2df8528a3456\"\u003e\u003ccode\u003e5807d0e\u003c/code\u003e\u003c/a\u003e fix(api): restore missing features\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/2cb7a83a029aa3bd960536158f16231fe0ad6d0d\"\u003e\u003ccode\u003e2cb7a83\u003c/code\u003e\u003c/a\u003e feat(api): CMA Memory public beta\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/edbddf7715a78e56ab019737977e4e2db60acf1b\"\u003e\u003ccode\u003eedbddf7\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/4d3e27c78b404f7a3fcb7b1cd2221033e615574b\"\u003e\u003ccode\u003e4d3e27c\u003c/code\u003e\u003c/a\u003e chore(internal): more robust bootstrap script\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d2b3cda70e3c3b2bc153a9a486f90c3111bd4323\"\u003e\u003ccode\u003ed2b3cda\u003c/code\u003e\u003c/a\u003e chore(tests): bump steady to v0.22.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5871ccb66966dc2b6a3a33b8c8bf419512d830b8\"\u003e\u003ccode\u003e5871ccb\u003c/code\u003e\u003c/a\u003e perf(client): optimize file structure copying in multipart requests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b4fba031da1b33c80aa5104e84a7babda3b847f5\"\u003e\u003ccode\u003eb4fba03\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.96.0...v0.97.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.2.25 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certi...\n\n_Description has been truncated_","html_url":"https://github.com/AhmedAmineBejaoui/ai-code-review-platform/pull/77","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmedAmineBejaoui%2Fai-code-review-platform/issues/77","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/77/packages"}},{"old_version":"5.2.0","new_version":"7.4.3","update_type":"major","path":null,"pr_created_at":"2026-04-28T02:14:36.000Z","version_change":"5.2.0 → 7.4.3","issue":{"uuid":"4340094671","node_id":"PR_kwDOMFeY887WLVLy","number":173,"state":"open","title":"python-deps(deps): bump the python-dependencies group across 1 directory with 17 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":["dependabot[bot]"],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-04-28T02:14:36.000Z","updated_at":"2026-04-28T02:18:50.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"python-deps(deps): bump","group_name":"python-dependencies","update_count":17,"packages":[{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"mkdocs-section-index","old_version":"0.3.11","new_version":"0.3.12","repository_url":"https://github.com/oprypin/mkdocs-section-index"},{"name":"mkdocstrings","old_version":"1.0.3","new_version":"1.0.4","repository_url":"https://github.com/mkdocstrings/mkdocstrings"},{"name":"packaging","old_version":"26.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pytest","old_version":"9.0.2","new_version":"9.0.3","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-order","old_version":"1.3.0","new_version":"1.4.0","repository_url":"https://github.com/pytest-dev/pytest-order"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"chardet","old_version":"5.2.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"charset-normalizer","old_version":"3.4.6","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"click","old_version":"8.3.1","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pydantic](https://github.com/pydantic/pydantic), [pyright](https://github.com/RobertCraigie/pyright-python), [wheel](https://github.com/pypa/wheel), [mkdocs-section-index](https://github.com/oprypin/mkdocs-section-index), [mkdocstrings](https://github.com/mkdocstrings/mkdocstrings), [packaging](https://github.com/pypa/packaging), [pytest](https://github.com/pytest-dev/pytest), [pytest-order](https://github.com/pytest-dev/pytest-order), [certifi](https://github.com/certifi/python-certifi), [chardet](https://github.com/chardet/chardet), [charset-normalizer](https://github.com/jawah/charset_normalizer), [idna](https://github.com/kjd/idna), [click](https://github.com/pallets/click), [more-itertools](https://github.com/more-itertools/more-itertools), [pathspec](https://github.com/cpburnz/python-pathspec), [platformdirs](https://github.com/tox-dev/platformdirs) and [pydantic-core](https://github.com/pydantic/pydantic) to permit the latest version.\nUpdates `pydantic` from 2.12.5 to 2.13.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.0 2026-04-13\u003c/h2\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.13/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 contains the updated \u003ccode\u003epydantic.v1\u003c/code\u003e namespace, matching version 1.10.26 which includes support for Python 3.14.\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eSee the beta releases for all changes sinces 2.12.\u003c/p\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd zizmor for GitHub Actions workflow linting by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13039\"\u003e#13039\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate jiter to v0.14.0 to fix a segmentation fault on musl Linux by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13064\"\u003e#13064\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.1\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.13/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 contains the updated \u003ccode\u003epydantic.v1\u003c/code\u003e namespace, matching version 1.10.26 which includes support for Python 3.14.\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eSee the beta releases for all changes sinces 2.12.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow default factories of private attributes to take validated model data by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13013\"\u003e#13013\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\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/pydantic/pydantic/commit/9e9a11132c980c4ec84ff6d2df06d4c1a55ca8f3\"\u003e\u003ccode\u003e9e9a111\u003c/code\u003e\u003c/a\u003e Fix backported test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1ec8c6aa0cae1c78409c6f31af738a24e16c7124\"\u003e\u003ccode\u003e1ec8c6a\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/fb4f2044436e9fa4ff9745479ce263016a99c4d6\"\u003e\u003ccode\u003efb4f204\u003c/code\u003e\u003c/a\u003e Handle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/ca3ddd1149bd3b14273922a29da174804496a055\"\u003e\u003ccode\u003eca3ddd1\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/000e823a3ab7545b0c6064fde34effdcd02044ab\"\u003e\u003ccode\u003e000e823\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d45d8be3ffb6dfc6d0c64da6980140c91ff841fb\"\u003e\u003ccode\u003ed45d8be\u003c/code\u003e\u003c/a\u003e Prepare release 2.13.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/54aca609ce58e73dfe1c681d93432fbe3a4621da\"\u003e\u003ccode\u003e54aca60\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/46bf4fa648af3a1fbf4603a37f210e9d9c618357\"\u003e\u003ccode\u003e46bf4fa\u003c/code\u003e\u003c/a\u003e Fix Pydantic release workflow (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13067\"\u003e#13067\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1b359edab09c623464d23c6fd2503ae5ff276d43\"\u003e\u003ccode\u003e1b359ed\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13065\"\u003e#13065\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b1bf19445d8ac144a7a0e82674d2d87eebab6c18\"\u003e\u003ccode\u003eb1bf194\u003c/code\u003e\u003c/a\u003e Fix model equality when using runtime \u003ccode\u003eextra\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13062\"\u003e#13062\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.5...v2.13.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyright` to 1.1.409\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/RobertCraigie/pyright-python/commit/d7508e5425d3d02761d70dab1f9a2086573af429\"\u003e\u003ccode\u003ed7508e5\u003c/code\u003e\u003c/a\u003e [pyright updated to 1.1.409] Update Version (\u003ca href=\"https://redirect.github.com/RobertCraigie/pyright-python/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/RobertCraigie/pyright-python/compare/v1.1.408...v1.1.409\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `wheel` to 0.47.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/wheel/releases\"\u003ewheel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.47.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003ewheel info\u003c/code\u003e subcommand to display metadata about wheel files without unpacking them (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/639\"\u003e#639\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eWheelFile\u003c/code\u003e raising \u003ccode\u003eMissing RECORD file\u003c/code\u003e when the wheel filename contains uppercase characters (e.g. \u003ccode\u003eDjango-3.2.5.whl\u003c/code\u003e) but the \u003ccode\u003e.dist-info\u003c/code\u003e directory inside uses normalized lowercase naming (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/411\"\u003e#411\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/wheel/blob/main/docs/news.rst\"\u003ewheel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease Notes\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003e0.47.0 (2026-04-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003ewheel info\u003c/code\u003e subcommand to display metadata about wheel files without\nunpacking them (\u003ccode\u003e[#639](https://github.com/pypa/wheel/issues/639) \u0026lt;https://github.com/pypa/wheel/issues/639\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eWheelFile\u003c/code\u003e raising \u003ccode\u003eMissing RECORD file\u003c/code\u003e when the wheel filename contains\nuppercase characters (e.g. \u003ccode\u003eDjango-3.2.5.whl\u003c/code\u003e) but the \u003ccode\u003e.dist-info\u003c/code\u003e directory\ninside uses normalized lowercase naming\n(\u003ccode\u003e[#411](https://github.com/pypa/wheel/issues/411) \u0026lt;https://github.com/pypa/wheel/issues/411\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.3 (2026-01-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eImportError: cannot import name '_setuptools_logging' from 'wheel'\u003c/code\u003e when\ninstalled alongside an old version of setuptools and running the \u003ccode\u003ebdist_wheel\u003c/code\u003e\ncommand (\u003ccode\u003e[#676](https://github.com/pypa/wheel/issues/676) \u0026lt;https://github.com/pypa/wheel/issues/676\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.2 (2026-01-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRestored the \u003ccode\u003ebdist_wheel\u003c/code\u003e command for compatibility with \u003ccode\u003esetuptools\u003c/code\u003e older than\nv70.1\u003c/li\u003e\n\u003cli\u003eImporting \u003ccode\u003ewheel.bdist_wheel\u003c/code\u003e now emits a \u003ccode\u003eFutureWarning\u003c/code\u003e instead of a\n\u003ccode\u003eDeprecationWarning\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003ewheel unpack\u003c/code\u003e potentially altering the permissions of files outside of the\ndestination tree with maliciously crafted wheels (CVE-2026-24049)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.1 (2025-04-08)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTemporarily restored the \u003ccode\u003ewheel.macosx_libfile\u003c/code\u003e module\n(\u003ccode\u003e[#659](https://github.com/pypa/wheel/issues/659) \u0026lt;https://github.com/pypa/wheel/issues/659\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.0 (2025-04-03)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.8\u003c/li\u003e\n\u003cli\u003eRemoved the \u003ccode\u003ebdist_wheel\u003c/code\u003e setuptools command implementation and entry point.\nThe \u003ccode\u003ewheel.bdist_wheel\u003c/code\u003e module is now just an alias to\n\u003ccode\u003esetuptools.command.bdist_wheel\u003c/code\u003e, emitting a deprecation warning on import.\u003c/li\u003e\n\u003cli\u003eRemoved vendored \u003ccode\u003epackaging\u003c/code\u003e in favor of a run-time dependency on it\u003c/li\u003e\n\u003cli\u003eMade the \u003ccode\u003ewheel.metadata\u003c/code\u003e module private (with a deprecation warning if it's\nimported\u003c/li\u003e\n\u003cli\u003eMade the \u003ccode\u003ewheel.cli\u003c/code\u003e package private (no deprecation warning)\u003c/li\u003e\n\u003cli\u003eFixed an exception when calling the \u003ccode\u003econvert\u003c/code\u003e command with an empty description\nfield\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.45.1 (2024-11-23)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed pure Python wheels converted from eggs and wininst files having the ABI tag in\nthe file name\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/efd83a750f07a33462ea2eed365fd8dac9e51442\"\u003e\u003ccode\u003eefd83a7\u003c/code\u003e\u003c/a\u003e Created a new release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/bb69216d35588c2a0febc2d9a130727fe6e46ee3\"\u003e\u003ccode\u003ebb69216\u003c/code\u003e\u003c/a\u003e Reordered the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/d5a1763ce927618bfa7d82abe334d0d14a93cc37\"\u003e\u003ccode\u003ed5a1763\u003c/code\u003e\u003c/a\u003e fix(wheelfile): resolve .dist-info path case-insensitively when reading wheel...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/5718957928ece25eb0d1c12023c71dea4fcb5cf9\"\u003e\u003ccode\u003e5718957\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/625806845ae5756be3cc0f9d44832c29079c0954\"\u003e\u003ccode\u003e6258068\u003c/code\u003e\u003c/a\u003e chore: log_level is better than log_cli_level (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/2975debc789682b3a448b134611acc6962a93eb3\"\u003e\u003ccode\u003e2975deb\u003c/code\u003e\u003c/a\u003e Require tox \u0026gt;= 4.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/47674ba770e5ee72d679b7eb32b558e0c177640d\"\u003e\u003ccode\u003e47674ba\u003c/code\u003e\u003c/a\u003e chore: add check-sdist to checks (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/681\"\u003e#681\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/56223f6f8dfa8d3d40923f24dcf159204698d7b6\"\u003e\u003ccode\u003e56223f6\u003c/code\u003e\u003c/a\u003e \u003ccode\u003e__package__\u003c/code\u003e → \u003ccode\u003e__spec__.parent\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/679\"\u003e#679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/0ce509e02dc3cd1b7b0bdf868482de062b3c21c3\"\u003e\u003ccode\u003e0ce509e\u003c/code\u003e\u003c/a\u003e Added the wheel info subcommand (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/669\"\u003e#669\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/39039c0f3446c1ed5ec52621e98bc2bad8178a06\"\u003e\u003ccode\u003e39039c0\u003c/code\u003e\u003c/a\u003e Improved the index page\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/wheel/compare/0.46.3...0.47.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-section-index` from 0.3.11 to 0.3.12\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/releases\"\u003emkdocs-section-index's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.3.12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeclare support of \u003ca href=\"https://pypi.org/project/properdocs-theme-readthedocs/\"\u003eproperdocs-theme-readthedocs\u003c/a\u003e, such that there is no warning printed for it - \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/fefc63086bfe41d0bd91f7541721ab4f96db25dc\"\u003ehttps://github.com/oprypin/mkdocs-section-index/commit/fefc63086bfe41d0bd91f7541721ab4f96db25dc\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/compare/v0.3.11...v0.3.12\"\u003ehttps://github.com/oprypin/mkdocs-section-index/compare/v0.3.11...v0.3.12\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/oprypin/mkdocs-section-index/commit/869bbda96ac29b178cddfff57cabe8884563afde\"\u003e\u003ccode\u003e869bbda\u003c/code\u003e\u003c/a\u003e v0.3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/5ec1820d48bed54a880405edc93f1ce682e004d6\"\u003e\u003ccode\u003e5ec1820\u003c/code\u003e\u003c/a\u003e Fix a doc link so it doesn't only work on GitHub\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/2a898e8022f22bfd86ba5b8c60e0b0a0cc6089e9\"\u003e\u003ccode\u003e2a898e8\u003c/code\u003e\u003c/a\u003e Update docs dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/fefc63086bfe41d0bd91f7541721ab4f96db25dc\"\u003e\u003ccode\u003efefc630\u003c/code\u003e\u003c/a\u003e Declare support of properdocs-theme-readthedocs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/4d758be189becb315f12607146737c83ca922a3b\"\u003e\u003ccode\u003e4d758be\u003c/code\u003e\u003c/a\u003e Update deps, enable more lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/8cea221e6781c7e616cba249f46c957408a91590\"\u003e\u003ccode\u003e8cea221\u003c/code\u003e\u003c/a\u003e Drop Python 3.9, switch doc building to ProperDocs\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/compare/v0.3.11...v0.3.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocstrings` from 1.0.3 to 1.0.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases\"\u003emkdocstrings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.4\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.4\"\u003e1.0.4\u003c/a\u003e - 2026-04-15\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003eCompare with 1.0.3\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd timeout when downloading inventories (10 seconds) (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e3d1969a\u003c/a\u003e by Simon Lloyd). \u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/819\"\u003eIssue-819\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/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md\"\u003emkdocstrings's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.4\"\u003e1.0.4\u003c/a\u003e - 2026-04-15\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003eCompare with 1.0.3\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd timeout when downloading inventories (10 seconds) (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e3d1969a\u003c/a\u003e by Simon Lloyd). \u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/819\"\u003eIssue-819\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/mkdocstrings/mkdocstrings/commit/a938528b51b42cde52465d06d8b1a52484837366\"\u003e\u003ccode\u003ea938528\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/1eaa2242ec33e4b6ce666f0bbc25391f2a72c1d2\"\u003e\u003ccode\u003e1eaa224\u003c/code\u003e\u003c/a\u003e ci: Lint and type-check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/80e090d0bfbfa5688639e78559a4bb7bd3f7a55b\"\u003e\u003ccode\u003e80e090d\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/5f82a5822c50dc928ee4a133c1445543d3afa393\"\u003e\u003ccode\u003e5f82a58\u003c/code\u003e\u003c/a\u003e chore: Template upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e\u003ccode\u003e3d1969a\u003c/code\u003e\u003c/a\u003e fix: Add timeout when downloading inventories (10 seconds)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/a0c47b9992416cf02b8dfc7a76a6c5503e98cd9c\"\u003e\u003ccode\u003ea0c47b9\u003c/code\u003e\u003c/a\u003e docs: Fix broken link in README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/e500a2b416656ede76aac316304415e428dd0aa1\"\u003e\u003ccode\u003ee500a2b\u003c/code\u003e\u003c/a\u003e chore: Update sponsors section in README\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `packaging` from 26.0 to 26.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/releases\"\u003epackaging's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix incorrect sysconfig var name for pyemscripten by \u003ca href=\"https://github.com/ryanking13\"\u003e\u003ccode\u003e@​ryanking13\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1160\"\u003epypa/packaging#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003eVersion\u003c/code\u003e, \u003ccode\u003eSpecifier\u003c/code\u003e, \u003ccode\u003eSpecifierSet\u003c/code\u003e, \u003ccode\u003eTag\u003c/code\u003e, \u003ccode\u003eMarker\u003c/code\u003e, and \u003ccode\u003eRequirement\u003c/code\u003e pickle-safe\nand backward-compatible with pickles created in 25.0-26.1 (including references to the removed\n\u003ccode\u003epackaging._structures\u003c/code\u003e module) by \u003ca href=\"https://github.com/eachimei\"\u003e\u003ccode\u003e@​eachimei\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1163\"\u003epypa/packaging#1163\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1168\"\u003epypa/packaging#1168\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1170\"\u003epypa/packaging#1170\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1171\"\u003epypa/packaging#1171\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: re-export ExceptionGroup for now by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1164\"\u003epypa/packaging#1164\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDocumentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edocs: add errors section and fix missing details by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1159\"\u003epypa/packaging#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs(dev): document property-based test suite by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1167\"\u003epypa/packaging#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in DirectUrl documentation by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1169\"\u003epypa/packaging#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs(specifiers): add is_unsatisfiable() usage example by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1166\"\u003epypa/packaging#1166\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnable the auditor persona on zizmor by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1158\"\u003epypa/packaging#1158\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTest new pickle guarantees by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1174\"\u003epypa/packaging#1174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse native uv integration in rtd by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1175\"\u003epypa/packaging#1175\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ryanking13\"\u003e\u003ccode\u003e@​ryanking13\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1160\"\u003epypa/packaging#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/eachimei\"\u003e\u003ccode\u003e@​eachimei\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1163\"\u003epypa/packaging#1163\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/packaging/compare/26.1...26.2\"\u003ehttps://github.com/pypa/packaging/compare/26.1...26.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e26.1\u003c/h2\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cdel\u003ePEP 783: add handling for Emscripten wheel tags by \u003ca href=\"https://github.com/hoodmane\"\u003e\u003ccode\u003e@​hoodmane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/804\"\u003epypa/packaging#804\u003c/a\u003e\u003c/del\u003e (old name used in implementation, will be fixed in next release)\u003c/li\u003e\n\u003cli\u003ePEP 803: add handling for the \u003ccode\u003eabi3.abi3t\u003c/code\u003e free-threading tag by \u003ca href=\"https://github.com/ngoldbaum\"\u003e\u003ccode\u003e@​ngoldbaum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1099\"\u003epypa/packaging#1099\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePEP 723: add \u003ccode\u003epackaging.dependency_groups\u003c/code\u003e module, based on the \u003ccode\u003edependency-groups\u003c/code\u003e package by \u003ca href=\"https://github.com/sirosen\"\u003e\u003ccode\u003e@​sirosen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1065\"\u003epypa/packaging#1065\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.direct_url\u003c/code\u003e module by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/944\"\u003epypa/packaging#944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.errors\u003c/code\u003e module by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1071\"\u003epypa/packaging#1071\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e using ranges (new internals that will be expanded in future versions) by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1119\"\u003epypa/packaging#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecreate_compatible_tags_selector\u003c/code\u003e to select compatible tags by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1110\"\u003epypa/packaging#1110\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ekey\u003c/code\u003e argument to \u003ccode\u003eSpecifierSet.filter()\u003c/code\u003e by \u003ca href=\"https://github.com/frostming\"\u003e\u003ccode\u003e@​frostming\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1068\"\u003epypa/packaging#1068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003e\u0026amp;\u003c/code\u003e and \u003ccode\u003e|\u003c/code\u003e for \u003ccode\u003eMarker\u003c/code\u003e's by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1146\"\u003epypa/packaging#1146\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNormalize \u003ccode\u003eVersion.__replace__\u003c/code\u003e and add \u003ccode\u003eVersion.from_parts\u003c/code\u003e by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1078\"\u003epypa/packaging#1078\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd an option to validate compressed tag set sort order in \u003ccode\u003eparse_wheel_filename\u003c/code\u003e by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1150\"\u003epypa/packaging#1150\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBehavior adaptations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow exclusion of pre-releases for \u003ccode\u003e\u0026lt;V.postN\u003c/code\u003e to match spec by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1140\"\u003epypa/packaging#1140\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/blob/main/CHANGELOG.rst\"\u003epackaging's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e26.2 - 2026-04-24\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\nFixes:\n\u003cul\u003e\n\u003cli\u003eFix incorrect sysconfig var name for pyemscripten in (:pull:\u003ccode\u003e1160\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003eVersion\u003c/code\u003e, \u003ccode\u003eSpecifier\u003c/code\u003e, \u003ccode\u003eSpecifierSet\u003c/code\u003e, \u003ccode\u003eTag\u003c/code\u003e, \u003ccode\u003eMarker\u003c/code\u003e, and \u003ccode\u003eRequirement\u003c/code\u003e pickle-safe\u003cbr /\u003e\nand backward-compatible with pickles created in 25.0-26.1 (including references to the removed\u003cbr /\u003e\n\u003ccode\u003epackaging._structures\u003c/code\u003e module) (:pull:\u003ccode\u003e1163\u003c/code\u003e, :pull:\u003ccode\u003e1168\u003c/code\u003e, :pull:\u003ccode\u003e1170\u003c/code\u003e, :pull:\u003ccode\u003e1171\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRe-export \u003ccode\u003eExceptionGroup\u003c/code\u003e in metadata for now in (:pull:\u003ccode\u003e1164\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDocumentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd errors section and fix missing details in (:pull:\u003ccode\u003e1159\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDocument our property-based test suite in (:pull:\u003ccode\u003e1167\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix a \u003ccode\u003eDirectUrl\u003c/code\u003e typo in (:pull:\u003ccode\u003e1167\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd example of \u003ccode\u003eis_unsatisfiable\u003c/code\u003e in (:pull:\u003ccode\u003e1166\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnable the auditor persona on zizmor in (:pull:\u003ccode\u003e1158\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eTest new pickle guarantees in (:pull:\u003ccode\u003e1174\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eUse new native ReadTheDocs uv integration in (:pull:\u003ccode\u003e1175\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e26.1 - 2026-04-14\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePEP 783: add handling for Emscripten wheel tags in (:pull:\u003ccode\u003e804\u003c/code\u003e) (old name used in implementation, fixed in next release)\u003c/li\u003e\n\u003cli\u003ePEP 803: add handling for the \u003ccode\u003eabi3.abi3t\u003c/code\u003e free-threading tag in (:pull:\u003ccode\u003e1099\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePEP 723: add \u003ccode\u003epackaging.dependency_groups\u003c/code\u003e module, based on the \u003ccode\u003edependency-groups\u003c/code\u003e package in (:pull:\u003ccode\u003e1065\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.direct_url\u003c/code\u003e module in (:pull:\u003ccode\u003e944\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.errors\u003c/code\u003e module in (:pull:\u003ccode\u003e1071\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e using ranges (new internals that will be expanded in future versions) in (:pull:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecreate_compatible_tags_selector\u003c/code\u003e to select compatible tags in (:pull:\u003ccode\u003e1110\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ekey\u003c/code\u003e argument to \u003ccode\u003eSpecifierSet.filter()\u003c/code\u003e in (:pull:\u003ccode\u003e1068\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003e\u0026amp;\u003c/code\u003e and \u003ccode\u003e|\u003c/code\u003e for \u003ccode\u003eMarker\u003c/code\u003e's in (:pull:\u003ccode\u003e1146\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eNormalize \u003ccode\u003eVersion.__replace__\u003c/code\u003e and add \u003ccode\u003eVersion.from_parts\u003c/code\u003e in (:pull:\u003ccode\u003e1078\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd an option to validate compressed tag set sort order in \u003ccode\u003eparse_wheel_filename\u003c/code\u003e in (:pull:\u003ccode\u003e1150\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBehavior adaptations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow exclusion of pre-releases for \u003ccode\u003e\u0026lt;V.postN\u003c/code\u003e to match spec in (:pull:\u003ccode\u003e1140\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eNarrow exclusion of post-releases for \u003ccode\u003e\u0026gt;V\u003c/code\u003e to match spec in (:pull:\u003ccode\u003e1141\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003eformat_full_version\u003c/code\u003e to \u003ccode\u003e_format_full_version\u003c/code\u003e to make it visibly private in (:pull:\u003ccode\u003e1125\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict local version to ASCII in (:pull:\u003ccode\u003e1102\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePylock (PEP 751) updates:\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/84a87ee42483d7352f9502d78a9553da8859aa7a\"\u003e\u003ccode\u003e84a87ee\u003c/code\u003e\u003c/a\u003e Bump for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/4a616b65bed23c8c6d58e6b0fc1a4434d4ff1f14\"\u003e\u003ccode\u003e4a616b6\u003c/code\u003e\u003c/a\u003e docs: a few more updates to prepare for 26.2 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1176\"\u003e#1176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/9de6f44f1e82d4595edf3aad1c4f6f98c85935a0\"\u003e\u003ccode\u003e9de6f44\u003c/code\u003e\u003c/a\u003e ci: use native uv integration in rtd (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1175\"\u003e#1175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/bc76e14debd1a2799d1ca8f9d9c9823f35bfa466\"\u003e\u003ccode\u003ebc76e14\u003c/code\u003e\u003c/a\u003e chore: update changelog for 26.2 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1161\"\u003e#1161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/3f00091c08f0aa830e33ed7db00f16f11c8ac97f\"\u003e\u003ccode\u003e3f00091\u003c/code\u003e\u003c/a\u003e tests: add a pickle check (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1174\"\u003e#1174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/48a8a069805291186522de3eff73ea80a8ca96ad\"\u003e\u003ccode\u003e48a8a06\u003c/code\u003e\u003c/a\u003e fix: make Requirements/Markers pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1171\"\u003e#1171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/823b44ed1f904084a77ae3adf0ef130af6365f84\"\u003e\u003ccode\u003e823b44e\u003c/code\u003e\u003c/a\u003e fix: make Tags pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1170\"\u003e#1170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/4bed32d920ca7211dd65fdf0a1ee06376e9c4733\"\u003e\u003ccode\u003e4bed32d\u003c/code\u003e\u003c/a\u003e fix: make Specifier / SpecifierSet pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1168\"\u003e#1168\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/963118e37caae97bc8b72f72956c7fb4ca9857ec\"\u003e\u003ccode\u003e963118e\u003c/code\u003e\u003c/a\u003e fix: re-export ExceptionGroup for now (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1164\"\u003e#1164\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/66e34a80256c96dea11da143682950c84b8133bb\"\u003e\u003ccode\u003e66e34a8\u003c/code\u003e\u003c/a\u003e docs(specifiers): add is_unsatisfiable() usage example (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1166\"\u003e#1166\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/packaging/compare/26.0...26.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 9.0.2 to 9.0.3\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.0.3\u003c/h2\u003e\n\u003ch1\u003epytest 9.0.3 (2026-04-07)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12444\"\u003e#12444\u003c/a\u003e: Fixed \u003ccode\u003epytest.approx\u003c/code\u003e which now correctly takes into account \u003ccode\u003e~collections.abc.Mapping\u003c/code\u003e keys order to compare them.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13634\"\u003e#13634\u003c/a\u003e: Blocking a \u003ccode\u003econftest.py\u003c/code\u003e file using the \u003ccode\u003e-p no:\u003c/code\u003e option is now explicitly disallowed.\u003c/p\u003e\n\u003cp\u003ePreviously this resulted in an internal assertion failure during plugin loading.\u003c/p\u003e\n\u003cp\u003ePytest now raises a clear \u003ccode\u003eUsageError\u003c/code\u003e explaining that conftest files are not plugins and cannot be disabled via \u003ccode\u003e-p\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/13734\"\u003e#13734\u003c/a\u003e: Fixed crash when a test raises an exceptiongroup with \u003ccode\u003e__tracebackhide__ = True\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/14195\"\u003e#14195\u003c/a\u003e: Fixed an issue where non-string messages passed to \u003c!-- raw HTML omitted --\u003eunittest.TestCase.subTest()\u003c!-- raw HTML omitted --\u003e were not printed.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14343\"\u003e#14343\u003c/a\u003e: Fixed use of insecure temporary directory (CVE-2025-71176).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13388\"\u003e#13388\u003c/a\u003e: Clarified documentation for \u003ccode\u003e-p\u003c/code\u003e vs \u003ccode\u003ePYTEST_PLUGINS\u003c/code\u003e plugin loading and fixed an incorrect \u003ccode\u003e-p\u003c/code\u003e example.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13731\"\u003e#13731\u003c/a\u003e: Clarified that capture fixtures (e.g. \u003ccode\u003ecapsys\u003c/code\u003e and \u003ccode\u003ecapfd\u003c/code\u003e) take precedence over the \u003ccode\u003e-s\u003c/code\u003e / \u003ccode\u003e--capture=no\u003c/code\u003e command-line options in \u003ccode\u003eAccessing captured output from a test function \u0026lt;accessing-captured-output\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14088\"\u003e#14088\u003c/a\u003e: Clarified that the default \u003ccode\u003epytest_collection\u003c/code\u003e hook sets \u003ccode\u003esession.items\u003c/code\u003e before it calls \u003ccode\u003epytest_collection_finish\u003c/code\u003e, not after.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14255\"\u003e#14255\u003c/a\u003e: TOML integer log levels must be quoted: Updating reference documentation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12689\"\u003e#12689\u003c/a\u003e: The test reports are now published to Codecov from GitHub Actions.\nThe test statistics is visible \u003ca href=\"https://app.codecov.io/gh/pytest-dev/pytest/tests\"\u003eon the web interface\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e-- by \u003ccode\u003ealeguy02\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/a7d58d7a21b78581e636bbbdea13c66ad1657c1e\"\u003e\u003ccode\u003ea7d58d7\u003c/code\u003e\u003c/a\u003e Prepare release version 9.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/089d98199c253d8f89a040243bc4f2aa6cd5ab22\"\u003e\u003ccode\u003e089d981\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14366\"\u003e#14366\u003c/a\u003e from bluetech/revert-14193-backport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/8127eaf4ab7f6b2fdd0dc1b38343ec97aeef05ac\"\u003e\u003ccode\u003e8127eaf\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Fix: assertrepr_compare respects dict insertion order (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14050\"\u003e#14050\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14193\"\u003e#14193\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/99a7e6029e7a6e8d53e5df114b1346e035370241\"\u003e\u003ccode\u003e99a7e60\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14363\"\u003e#14363\u003c/a\u003e from pytest-dev/patchback/backports/9.0.x/95d8423bd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ddee02a578da30dd43aedc39c1c1f1aaadfcee95\"\u003e\u003ccode\u003eddee02a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14343\"\u003e#14343\u003c/a\u003e from bluetech/cve-2025-71176-simple\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/74eac6916fee34726cb194f16c516e96fbd29619\"\u003e\u003ccode\u003e74eac69\u003c/code\u003e\u003c/a\u003e doc: Update training info (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14298\"\u003e#14298\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14301\"\u003e#14301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f92dee777cfdb77d1c43633d02766ddf1f07c869\"\u003e\u003ccode\u003ef92dee7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14267\"\u003e#14267\u003c/a\u003e from pytest-dev/patchback/backports/9.0.x/d6fa26c62...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7ee58acc8777c31ac6cf388d01addf5a414a7439\"\u003e\u003ccode\u003e7ee58ac\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12378\"\u003e#12378\u003c/a\u003e from Pierre-Sassoulas/fix-implicit-str-concat-and-d...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/37da870d37e3a2f5177cae075c7b9ae279432bf8\"\u003e\u003ccode\u003e37da870\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14259\"\u003e#14259\u003c/a\u003e from mitre88/patch-4 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14268\"\u003e#14268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c34bfa3b7acb65b594707c714f1d8461b0304eed\"\u003e\u003ccode\u003ec34bfa3\u003c/code\u003e\u003c/a\u003e Add explanation for string context diffs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14257\"\u003e#14257\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14266\"\u003e#14266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.0.2...9.0.3\"\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.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-order/releases\"\u003epytest-order's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\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.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/43375ca14b7a9d50f8645700998dbe2fcd2bcbf5\"\u003e\u003ccode\u003e43375ca\u003c/code\u003e\u003c/a\u003e Release 1.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/0e1d1efc4fa45554fb4db517f12b07dd58ea7f6c\"\u003e\u003ccode\u003e0e1d1ef\u003c/code\u003e\u003c/a\u003e Added option --order-after-ff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/3c5f6f9b5944de8dad81342b38519ecca39e508e\"\u003e\u003ccode\u003e3c5f6f9\u003c/code\u003e\u003c/a\u003e Remove Python 3.9, add Python 3.14 to CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/66dd806fc07b9dd5db76185934f7cdf8b7e3a83a\"\u003e\u003ccode\u003e66dd806\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/6a76a9424a7c6eb5e3c9cac0acf3a5139ccbbd53\"\u003e\u003ccode\u003e6a76a94\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/87112f48676660eac77bac6856d97e5bdcd91653\"\u003e\u003ccode\u003e87112f4\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/4d84b464867c350a4d88d19437eeec90e741b2c8\"\u003e\u003ccode\u003e4d84b46\u003c/code\u003e\u003c/a\u003e Bump codecov/codecov-action from 5 to 6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-order/commit/9933cf58aef484e2c5f4c6addaa6136d66865cd1\"\u003e\u003ccode\u003e9933cf5\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/f9c43a14905444a557e556d289854596031feccf\"\u003e\u003ccode\u003ef9c43a1\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/783c9b6b6ab8b0741cb39ae10351074e622a34d9\"\u003e\u003ccode\u003e783c9b6\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.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.2.25 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/0a49067eb434e53e1f8df5f7707d5dc05ef9def4\"\u003e\u003ccode\u003e0a49067\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/403\"\u003e#403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/acf6ce8e39e3b125f4349e11904295e4fe4c1bed\"\u003e\u003ccode\u003eacf6ce8\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/feb0ed26163a9417ea0fb8eb52d47e79fcf202ab\"\u003e\u003ccode\u003efeb0ed2\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7.0.0 to 8.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/397\"\u003e#397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d9c11a50369cc377abb40f7909ded3d6da4d98a3\"\u003e\u003ccode\u003ed9c11a5\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6.0.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/396\"\u003e#396\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.04.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `chardet` from 5.2.0 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.6 to 3.4.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.7\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/0f07891bf516b5d5231f1bd4dd2d8da7d4d09a9a\"\u003e\u003ccode\u003e0f07891\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/729\"\u003e#729\u003c/a\u003e from jawah/release-3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fdbeb299479e8f4d737e4d227cd0b2bd5d273dc0\"\u003e\u003ccode\u003efdbeb29\u003c/code\u003e\u003c/a\u003e chore: update dev, and ci requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b66f922bfbdbdd9dd46af18a8964d4fb888756d4\"\u003e\u003ccode\u003eb66f922\u003c/code\u003e\u003c/a\u003e chore: add ft classifier\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/f94249d0a2c712f2d03124f4de6b77f5e03aaa96\"\u003e\u003ccode\u003ef94249d\u003c/code\u003e\u003c/a\u003e chore: add test cases for utf_7 recent fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/95c866f6c984bbd043e7e3ed0628aa4f3f8d5a26\"\u003e\u003ccode\u003e95c866f\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/4f429bb764c7e893f99bb4bceb60856da1baacfb\"\u003e\u003ccode\u003e4f429bb\u003c/code\u003e\u003c/a\u003e chore: bump mypy pre-commit to v1.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b579cd6cab9bd83aa3fc0ca169d4df022bf4888c\"\u003e\u003ccode\u003eb579cd6\u003c/code\u003e\u003c/a\u003e fix: correctly remove SIG remnant in utf-7 decoded string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/58bf944a77cc0883fc46a6ee8edac3549fea5d59\"\u003e\u003ccode\u003e58bf944\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump github/codeql-action from 4.32.4 to 4.35.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/44cf8a1b676a2532a8f1694e62e4f4f98f9132e1\"\u003e\u003ccode\u003e44cf8a1\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/362bc20073f737b1ba4ca2f68cffb0c4cc024d20\"\u003e\u003ccode\u003e362bc20\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump docker/setup-qemu-action from 3.7.0 to 4.0.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.6...3.4.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.11 to 3.13\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.rst\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e3.13 (2026-04-22)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect classification error for codepoint U+A7F1\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e3.12 (2026-04-21)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 17.0.0.\u003c/li\u003e\n\u003cli\u003eIssue a deprecation warning for the transitional argument.\u003c/li\u003e\n\u003cli\u003eAdded lazy-loading to provide some performance improvements.\u003c/li\u003e\n\u003cli\u003eRemoved vestiges of code related to Python 2 support, including\nsegmentation of data structures specific to Jython.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Rodrigo Nogueira for contributions to this release.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/89cdfd27338896cee6b1ee18e64c96ac28684ce0\"\u003e\u003ccode\u003e89cdfd2\u003c/code\u003e\u003c/a\u003e Release v3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1eb068687543118147417a8d8a70674e2c172891\"\u003e\u003ccode\u003e1eb0686\u003c/code\u003e\u003c/a\u003e Pre-release 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5f20d1e41eea3b3873d18d83d7a384784f72a92e\"\u003e\u003ccode\u003e5f20d1e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/220\"\u003e#220\u003c/a\u003e from kjd/unicode-next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/4ea84252ab21e62a79e5a3273746112b5dcfb810\"\u003e\u003ccode\u003e4ea8425\u003c/code\u003e\u003c/a\u003e Regenerate idnadata.py with correct NFKC_CF data\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/fd47341a08bbdcffda33694211ca4de10170cd41\"\u003e\u003ccode\u003efd47341\u003c/code\u003e\u003c/a\u003e Use NFKC_CF from Unicode data files instead of Python's unicodedata module\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/a5304a4cdbd7b31595f8ac42ffdfa88f5b936467\"\u003e\u003ccode\u003ea5304a4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/219\"\u003e#219\u003c/a\u003e from kjd/release-3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d80d6f9254d699961fa2c669a1534cde9d4ee5b6\"\u003e\u003ccode\u003ed80d6f9\u003c/code\u003e\u003c/a\u003e Release v3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1bb44ddb3f2a9dcf97a6ac11aba34e5b6ed31291\"\u003e\u003ccode\u003e1bb44dd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/218\"\u003e#218\u003c/a\u003e from kjd/release-candidate-3.12rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/909c49d15b8d159be163bccc7972116baffdb47b\"\u003e\u003ccode\u003e909c49d\u003c/code\u003e\u003c/a\u003e Release candidate for 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c5459a10370f005dc09921aee3201b5a45699f9d\"\u003e\u003ccode\u003ec5459a1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/217\"\u003e#217\u003c/a\u003e from kjd/housekeeping-2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.11...v3.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.1 to 8.3.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.3.3\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.3 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.3.3/\"\u003ehttps://pypi.org/project/click/8.3.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-3\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-3\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/1026\"\u003e#1026\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1477\"\u003e#1477\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2775\"\u003e#2775\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3298\"\u003e#3298\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3299\"\u003e#3299\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3238\"\u003e#3238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3224\"\u003e#3224\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/654\"\u003e#654\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/824\"\u003e#824\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/843\"\u003e#843\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/951\"\u003e#951\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3235\"\u003e#3235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3177\"\u003e#3177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2836\"\u003e#2836\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2837\"\u003e#2837\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3165\"\u003e#3165\u003c/a\u003e \u003ca href=\"https://redi...\n\n_Description has been truncated_","html_url":"https://github.com/tektronix/tm_data_types/pull/173","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tektronix%2Ftm_data_types/issues/173","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/173/packages"}},{"old_version":"6.0.0.post1","new_version":"7.4.3","update_type":"major","path":null,"pr_created_at":"2026-04-27T06:57:46.000Z","version_change":"6.0.0.post1 → 7.4.3","issue":{"uuid":"4333721116","node_id":"PR_kwDORK4Qs87V2xIQ","number":27,"state":"closed","title":"Bump the pip group across 1 directory with 15 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-04T07:09:50.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-27T06:57:46.000Z","updated_at":"2026-05-04T07:09:52.000Z","time_to_close":605524,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip","update_count":15,"packages":[{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"chardet","old_version":"6.0.0.post1","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"charset-normalizer","old_version":"3.4.4","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.3.1","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"},{"name":"gevent","old_version":"25.9.1","new_version":"26.4.0","repository_url":"https://github.com/gevent/gevent"},{"name":"greenlet","old_version":"3.3.2","new_version":"3.4.0","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"hiredis","old_version":"3.3.0","new_version":"3.3.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"importlib-metadata","old_version":"8.7.1","new_version":"9.0.0","repository_url":"https://github.com/python/importlib_metadata"},{"name":"redis","old_version":"7.2.0","new_version":"7.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"requests","old_version":"2.32.5","new_version":"2.33.1","repository_url":"https://github.com/psf/requests"},{"name":"sentry-sdk","old_version":"2.53.0","new_version":"2.58.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"werkzeug","old_version":"3.1.6","new_version":"3.1.8","repository_url":"https://github.com/pallets/werkzeug"},{"name":"zipp","old_version":"3.23.0","new_version":"3.23.1","repository_url":"https://github.com/jaraco/zipp"},{"name":"zope-interface","old_version":"8.2","new_version":"8.4","repository_url":"https://github.com/zopefoundation/zope.interface"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip group with 15 updates in the /python directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.4.22` |\n| [chardet](https://github.com/chardet/chardet) | `6.0.0.post1` | `7.4.3` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.4` | `3.4.7` |\n| [click](https://github.com/pallets/click) | `8.3.1` | `8.3.3` |\n| [gevent](https://github.com/gevent/gevent) | `25.9.1` | `26.4.0` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.3.2` | `3.4.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.3.0` | `3.3.1` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.13` |\n| [importlib-metadata](https://github.com/python/importlib_metadata) | `8.7.1` | `9.0.0` |\n| [redis](https://github.com/redis/redis-py) | `7.2.0` | `7.4.0` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.1` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.53.0` | `2.58.0` |\n| [werkzeug](https://github.com/pallets/werkzeug) | `3.1.6` | `3.1.8` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.0` | `3.23.1` |\n| [zope-interface](https://github.com/zopefoundation/zope.interface) | `8.2` | `8.4` |\n\n\nUpdates `certifi` from 2026.2.25 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/0a49067eb434e53e1f8df5f7707d5dc05ef9def4\"\u003e\u003ccode\u003e0a49067\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/403\"\u003e#403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/acf6ce8e39e3b125f4349e11904295e4fe4c1bed\"\u003e\u003ccode\u003eacf6ce8\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/feb0ed26163a9417ea0fb8eb52d47e79fcf202ab\"\u003e\u003ccode\u003efeb0ed2\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7.0.0 to 8.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/397\"\u003e#397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d9c11a50369cc377abb40f7909ded3d6da4d98a3\"\u003e\u003ccode\u003ed9c11a5\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6.0.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/396\"\u003e#396\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.04.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `chardet` from 6.0.0.post1 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/6.0.0.post1...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.4 to 3.4.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.7\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\u003cbr /\u003e\nmypyc changed the usual binary output for the optimized wheel. Beware, especially if using PyInstaller or alike. See \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/714\"\u003ejawah/charset_normalizer#714\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/0f07891bf516b5d5231f1bd4dd2d8da7d4d09a9a\"\u003e\u003ccode\u003e0f07891\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/729\"\u003e#729\u003c/a\u003e from jawah/release-3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fdbeb299479e8f4d737e4d227cd0b2bd5d273dc0\"\u003e\u003ccode\u003efdbeb29\u003c/code\u003e\u003c/a\u003e chore: update dev, and ci requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b66f922bfbdbdd9dd46af18a8964d4fb888756d4\"\u003e\u003ccode\u003eb66f922\u003c/code\u003e\u003c/a\u003e chore: add ft classifier\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/f94249d0a2c712f2d03124f4de6b77f5e03aaa96\"\u003e\u003ccode\u003ef94249d\u003c/code\u003e\u003c/a\u003e chore: add test cases for utf_7 recent fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/95c866f6c984bbd043e7e3ed0628aa4f3f8d5a26\"\u003e\u003ccode\u003e95c866f\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/4f429bb764c7e893f99bb4bceb60856da1baacfb\"\u003e\u003ccode\u003e4f429bb\u003c/code\u003e\u003c/a\u003e chore: bump mypy pre-commit to v1.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b579cd6cab9bd83aa3fc0ca169d4df022bf4888c\"\u003e\u003ccode\u003eb579cd6\u003c/code\u003e\u003c/a\u003e fix: correctly remove SIG remnant in utf-7 decoded string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/58bf944a77cc0883fc46a6ee8edac3549fea5d59\"\u003e\u003ccode\u003e58bf944\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump github/codeql-action from 4.32.4 to 4.35.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/44cf8a1b676a2532a8f1694e62e4f4f98f9132e1\"\u003e\u003ccode\u003e44cf8a1\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/362bc20073f737b1ba4ca2f68cffb0c4cc024d20\"\u003e\u003ccode\u003e362bc20\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump docker/setup-qemu-action from 3.7.0 to 4.0.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.4...3.4.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.1 to 8.3.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.3.3\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.3 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.3.3/\"\u003ehttps://pypi.org/project/click/8.3.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-3\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-3\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/1026\"\u003e#1026\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1477\"\u003e#1477\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2775\"\u003e#2775\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3298\"\u003e#3298\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3299\"\u003e#3299\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3238\"\u003e#3238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3224\"\u003e#3224\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/654\"\u003e#654\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/824\"\u003e#824\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/843\"\u003e#843\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/951\"\u003e#951\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3235\"\u003e#3235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3177\"\u003e#3177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2836\"\u003e#2836\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2837\"\u003e#2837\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3165\"\u003e#3165\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3262\"\u003e#3262\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3280\"\u003e#3280\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3111\"\u003e#3111\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3189\"\u003e#3189\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3250\"\u003e#3250\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2865\"\u003e#2865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2879\"\u003e#2879\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.3.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.3.2/\"\u003ehttps://pypi.org/project/click/8.3.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/29\"\u003ehttps://github.com/pallets/click/milestone/29\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.rst\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.3.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-20\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n:issue:\u003ccode\u003e1026\u003c/code\u003e :pr:\u003ccode\u003e1477\u003c/code\u003e :pr:\u003ccode\u003e2775\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. :issue:\u003ccode\u003e3298\u003c/code\u003e :pr:\u003ccode\u003e3299\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. :pr:\u003ccode\u003e3238\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n:issue:\u003ccode\u003e3224\u003c/code\u003e :pr:\u003ccode\u003e3240\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n:issue:\u003ccode\u003e654\u003c/code\u003e :issue:\u003ccode\u003e824\u003c/code\u003e :issue:\u003ccode\u003e843\u003c/code\u003e :pr:\u003ccode\u003e951\u003c/code\u003e :pr:\u003ccode\u003e3235\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. :pr:\u003ccode\u003e3151\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. :pr:\u003ccode\u003e3151\u003c/code\u003e :pr:\u003ccode\u003e3177\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. :issue:\u003ccode\u003e2836\u003c/code\u003e :pr:\u003ccode\u003e2837\u003c/code\u003e :pr:\u003ccode\u003e3165\u003c/code\u003e :pr:\u003ccode\u003e3262\u003c/code\u003e :pr:\u003ccode\u003e3280\u003c/code\u003e\n:pr:\u003ccode\u003e3328\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. :issue:\u003ccode\u003e3111\u003c/code\u003e :pr:\u003ccode\u003e3239\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. :issue:\u003ccode\u003e3189\u003c/code\u003e :pr:\u003ccode\u003e3250\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n:issue:\u003ccode\u003e2865\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. :issue:\u003ccode\u003e2879\u003c/code\u003e :pr:\u003ccode\u003e3248\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.3.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-02\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eflag_value\u003c/code\u003e when \u003ccode\u003eis_flag=False\u003c/code\u003e to allow such options to be\nused without an explicit value. :issue:\u003ccode\u003e3084\u003c/code\u003e :pr:\u003ccode\u003e3152\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eHide \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values as \u003ccode\u003eNone\u003c/code\u003e when using \u003ccode\u003elookup_default()\u003c/code\u003e.\n:issue:\u003ccode\u003e3136\u003c/code\u003e :pr:\u003ccode\u003e3199\u003c/code\u003e :pr:\u003ccode\u003e3202\u003c/code\u003e :pr:\u003ccode\u003e3209\u003c/code\u003e :pr:\u003ccode\u003e3212\u003c/code\u003e :pr:\u003ccode\u003e3224\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c06d2d0a6aee6bcc50bd8257be2a4a592f4e75d0\"\u003e\u003ccode\u003ec06d2d0\u003c/code\u003e\u003c/a\u003e Release 8.3.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/f1f191ecd2c790b161187c78e7c88440e9524e5c\"\u003e\u003ccode\u003ef1f191e\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3343\"\u003e#3343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bb59ba0fd279ca085d1113f0499b6a602ca31081\"\u003e\u003ccode\u003ebb59ba0\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/4a352253c9ff013e36d11e4a6820d36d00ff2cd4\"\u003e\u003ccode\u003e4a35225\u003c/code\u003e\u003c/a\u003e Reduce blast-radius of \u003ccode\u003eUNSET\u003c/code\u003e in \u003ccode\u003edefault_map\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c07bb936de43fd303f9cfbefe248ab23fd2199c8\"\u003e\u003ccode\u003ec07bb93\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into unset-in-default-map\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c7e1ba8448cbcb2cdd9c1c7f4a592e863dcc3995\"\u003e\u003ccode\u003ec7e1ba8\u003c/code\u003e\u003c/a\u003e Reorder \u003ccode\u003eParameterSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/76552ff1e8c85837f911fc34037e702ae4327eda\"\u003e\u003ccode\u003e76552ff\u003c/code\u003e\u003c/a\u003e Show default string in prompt (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/ac5cec5fe54e5a691e7bac17f441ce9498e0744c\"\u003e\u003ccode\u003eac5cec5\u003c/code\u003e\u003c/a\u003e Reorder ParameterSource from most to least explicit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c452e00e6772931b7071d9316b82b77e5b8f280\"\u003e\u003ccode\u003e8c452e0\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into show-default-string-in-prompt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c95c73bd5ef89eac638f85f1904a104ba4b1a32\"\u003e\u003ccode\u003e8c95c73\u003c/code\u003e\u003c/a\u003e Reconcile default value passing and default activation (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.3.1...8.3.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gevent` from 25.9.1 to 26.4.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/2a096a958289611925b4b4475aaefe74815b6b0f\"\u003e\u003ccode\u003e2a096a9\u003c/code\u003e\u003c/a\u003e Preparing release 26.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/e80421d28dd4281c6ae78dd8eb2a83df85d39b0a\"\u003e\u003ccode\u003ee80421d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2171\"\u003e#2171\u003c/a\u003e from gevent/ci-py-ver-updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/6cfa49b74367e979f27db238f929508ec2a00dcf\"\u003e\u003ccode\u003e6cfa49b\u003c/code\u003e\u003c/a\u003e test__ssl.py: PROTOCOL_TLS deprecation fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/e2ec5ebbe3e10cea407bc28283cc906b809467c9\"\u003e\u003ccode\u003ee2ec5eb\u003c/code\u003e\u003c/a\u003e Fix deprecations about use of SSLContext without setting a protocol.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/38904026b3329e6afb630a2d6e72221952e5678e\"\u003e\u003ccode\u003e3890402\u003c/code\u003e\u003c/a\u003e lint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/26b5b7f500b9b9f71faa63e4d829df0b3f59018c\"\u003e\u003ccode\u003e26b5b7f\u003c/code\u003e\u003c/a\u003e psutil 6 deprecated .connections, use replacement .net_connections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/cbbd53e99c9c9a2cdb40c39fc271066157956a4d\"\u003e\u003ccode\u003ecbbd53e\u003c/code\u003e\u003c/a\u003e Clean up some warnings from leakcheck.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/384070642a1704389707f0a7805809d704da7d75\"\u003e\u003ccode\u003e3840706\u003c/code\u003e\u003c/a\u003e test__util is getting extra greenlets when combined with test__threadpool on ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/408aeebcdbe47c967fb964d0bbd63dde824e2975\"\u003e\u003ccode\u003e408aeeb\u003c/code\u003e\u003c/a\u003e test__select: libuv on recent versions of Python isn't producing the OSError ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/6b6ee4e25969046d0dae28ccc0cbcf6096be3d2d\"\u003e\u003ccode\u003e6b6ee4e\u003c/code\u003e\u003c/a\u003e Update python versions tested in CI.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gevent/gevent/compare/25.9.1...26.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.3.2 to 3.4.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-greenlet/greenlet/blob/master/CHANGES.rst\"\u003egreenlet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.4.0 (2026-04-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ePublish binary wheels for RiscV 64.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix multiple rare crash paths during interpreter shutdown.\u003c/p\u003e\n\u003cp\u003eNote that this now relies on the \u003ccode\u003eatexit\u003c/code\u003e module, and introduces\nsubtle API changes during interpreter shutdown (for example,\n\u003ccode\u003egetcurrent\u003c/code\u003e is no longer available once the \u003ccode\u003eatexit\u003c/code\u003e callback fires).\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR [#499](https://github.com/python-greenlet/greenlet/issues/499) \u0026lt;https://github.com/python-greenlet/greenlet/pull/499\u0026gt;\u003c/code\u003e_ by Nicolas\nBouvrette.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAddress the results of an automated code audit performed by\nDaniel Diniz. This includes several minor correctness changes that\ntheoretically could have been crashing bugs, but typically only in\nvery rare circumstances.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR 502 \u0026lt;https://github.com/python-greenlet/greenlet/pull/502\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix several race conditions that could arise in free-threaded\nbuilds when using greenlet objects from multiple threads, some of\nwhich could lead to assertion failures or interpreter crashes.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003eissue 503 \u0026lt;https://github.com/python-greenlet/greenlet/issues/503\u0026gt;\u003c/code\u003e_, with\nthanks to Nitay Dariel and Daniel Diniz.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/df6734edbef6a0e54ecc4ba4735d93ae6d721095\"\u003e\u003ccode\u003edf6734e\u003c/code\u003e\u003c/a\u003e Preparing release 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/0f860756608b767b2ed70f935053b319d1a1b828\"\u003e\u003ccode\u003e0f86075\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/504\"\u003e#504\u003c/a\u003e from python-greenlet/freethreading-fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/459657482f3efaee294edff672bde45ac3fac208\"\u003e\u003ccode\u003e4596574\u003c/code\u003e\u003c/a\u003e TLBC: crash appears to still happen on CI 3.14t ubuntu. Re-enable workaround.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/2f4a1cf53fa282ab28ea4815164a9cb09b9320ce\"\u003e\u003ccode\u003e2f4a1cf\u003c/code\u003e\u003c/a\u003e Make green_switch (python level greenlet.switch) and green_throw check for (p...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/a0c2a2a7519985d5fe2c034a54f1a0fed82a5905\"\u003e\u003ccode\u003ea0c2a2a\u003c/code\u003e\u003c/a\u003e Fix unused variable warning when asserts are disabled.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/8688581392187d68f35180148fcd6fb4fd9a972f\"\u003e\u003ccode\u003e8688581\u003c/code\u003e\u003c/a\u003e gcc was complaining about an incomplete std::atomic type. make sure we includ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/449c76045b71f7f96c48e8d62672e5382b17cc3d\"\u003e\u003ccode\u003e449c760\u003c/code\u003e\u003c/a\u003e Make MainGreenlet._thread_state atomic; we use it for cross thread checking a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/f840e00dea524c20801bcb4f8764b968590eb6ba\"\u003e\u003ccode\u003ef840e00\u003c/code\u003e\u003c/a\u003e Add critical sections to greenlet attribute accessors.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/6b281d3eca96ec82a87067b2016241296e4c60e9\"\u003e\u003ccode\u003e6b281d3\u003c/code\u003e\u003c/a\u003e test_contextvars: No need for the fallback case where contextvars isn't avail...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/f52615ae64f73b19e53e71cd1e12cbb1841246ff\"\u003e\u003ccode\u003ef52615a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/502\"\u003e#502\u003c/a\u003e from python-greenlet/devdanzin-audit\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.3.2...3.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.3.0 to 3.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.3.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003cp\u003eThis release fixes a compatibility issue with Python 3.15:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMNT: do not use deprecated load_module method (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/pull/218\"\u003eredis/hiredis-py#218\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributors\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/tacaswell\"\u003e\u003ccode\u003e@​tacaswell\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/3cb8f069006f7138620b065fba973ccc490bde3d\"\u003e\u003ccode\u003e3cb8f06\u003c/code\u003e\u003c/a\u003e Version 3.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/2836c965d28606fecfc8989059edb36a0c4fb320\"\u003e\u003ccode\u003e2836c96\u003c/code\u003e\u003c/a\u003e MNT: do not use deprecated load_module method (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/218\"\u003e#218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.3.0...v3.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.11 to 3.13\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.rst\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e3.13 (2026-04-22)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect classification error for codepoint U+A7F1\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e3.12 (2026-04-21)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 17.0.0.\u003c/li\u003e\n\u003cli\u003eIssue a deprecation warning for the transitional argument.\u003c/li\u003e\n\u003cli\u003eAdded lazy-loading to provide some performance improvements.\u003c/li\u003e\n\u003cli\u003eRemoved vestiges of code related to Python 2 support, including\nsegmentation of data structures specific to Jython.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Rodrigo Nogueira for contributions to this release.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/89cdfd27338896cee6b1ee18e64c96ac28684ce0\"\u003e\u003ccode\u003e89cdfd2\u003c/code\u003e\u003c/a\u003e Release v3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1eb068687543118147417a8d8a70674e2c172891\"\u003e\u003ccode\u003e1eb0686\u003c/code\u003e\u003c/a\u003e Pre-release 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5f20d1e41eea3b3873d18d83d7a384784f72a92e\"\u003e\u003ccode\u003e5f20d1e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/220\"\u003e#220\u003c/a\u003e from kjd/unicode-next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/4ea84252ab21e62a79e5a3273746112b5dcfb810\"\u003e\u003ccode\u003e4ea8425\u003c/code\u003e\u003c/a\u003e Regenerate idnadata.py with correct NFKC_CF data\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/fd47341a08bbdcffda33694211ca4de10170cd41\"\u003e\u003ccode\u003efd47341\u003c/code\u003e\u003c/a\u003e Use NFKC_CF from Unicode data files instead of Python's unicodedata module\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/a5304a4cdbd7b31595f8ac42ffdfa88f5b936467\"\u003e\u003ccode\u003ea5304a4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/219\"\u003e#219\u003c/a\u003e from kjd/release-3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d80d6f9254d699961fa2c669a1534cde9d4ee5b6\"\u003e\u003ccode\u003ed80d6f9\u003c/code\u003e\u003c/a\u003e Release v3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1bb44ddb3f2a9dcf97a6ac11aba34e5b6ed31291\"\u003e\u003ccode\u003e1bb44dd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/218\"\u003e#218\u003c/a\u003e from kjd/release-candidate-3.12rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/909c49d15b8d159be163bccc7972116baffdb47b\"\u003e\u003ccode\u003e909c49d\u003c/code\u003e\u003c/a\u003e Release candidate for 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c5459a10370f005dc09921aee3201b5a45699f9d\"\u003e\u003ccode\u003ec5459a1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/217\"\u003e#217\u003c/a\u003e from kjd/housekeeping-2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.11...v3.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `importlib-metadata` from 8.7.1 to 9.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/importlib_metadata/blob/main/NEWS.rst\"\u003eimportlib-metadata's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev9.0.0\u003c/h1\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eMetadataNotFound\u003c/code\u003e (subclass of \u003ccode\u003eFileNotFoundError\u003c/code\u003e) and updated \u003ccode\u003eDistribution.metadata\u003c/code\u003e/\u003ccode\u003emetadata()\u003c/code\u003e to raise it when the metadata files are missing instead of returning \u003ccode\u003eNone\u003c/code\u003e\u003ccode\u003epython/cpython#143387\u003c/code\u003e\u003ca href=\"https://redirect.github.com/python/importlib_metadata/issues/532\"\u003e#532\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev8.9.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epython/cpython#110937\u003c/code\u003e\u003ca href=\"https://redirect.github.com/python/cpython/issues/140141\"\u003epython/cpython#140141\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/python/cpython/issues/143658\"\u003epython/cpython#143658\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev8.8.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved Python 3.9 compatibility.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/importlib_metadata/commit/a9f883fef337c667a81a987bc0cbc0dbb43b2bfe\"\u003e\u003ccode\u003ea9f883f\u003c/code\u003e\u003c/a\u003e Finalize\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/9b0dfdfe2e187dca6644007570189aadc6c97a34\"\u003e\u003ccode\u003e9b0dfdf\u003c/code\u003e\u003c/a\u003e Raise an exception when no metadata file is found (\u003ca href=\"https://redirect.github.com/python/importlib_metadata/issues/532\"\u003e#532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/0f2229ca84f20be2ceaaa4c62a276fa9b003f5bc\"\u003e\u003ccode\u003e0f2229c\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into feature/no-metadata-exception\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/2f4088e490a73ac7f39b86214d2da16d2eb1ff39\"\u003e\u003ccode\u003e2f4088e\u003c/code\u003e\u003c/a\u003e Remove news fragments about internal details.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/0ac27203f8044daf634c22f385838122a0707449\"\u003e\u003ccode\u003e0ac2720\u003c/code\u003e\u003c/a\u003e Add news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/a5c2154835facb4a9d0a6f5b3aac1f3d1ff86170\"\u003e\u003ccode\u003ea5c2154\u003c/code\u003e\u003c/a\u003e Finalize\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/e66e22634f7522e7778b66e8a8b19782a11d4943\"\u003e\u003ccode\u003ee66e226\u003c/code\u003e\u003c/a\u003e Drop support for EOL Python 3.9 (\u003ca href=\"https://redirect.github.com/python/importlib_metadata/issues/530\"\u003e#530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/6027933ae96c9e51dd0b7ce392cb30f6fcae1940\"\u003e\u003ccode\u003e6027933\u003c/code\u003e\u003c/a\u003e Add news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/b89388a53bf857127e0a6860dfcfe2cd69a79ab8\"\u003e\u003ccode\u003eb89388a\u003c/code\u003e\u003c/a\u003e Import os_helper directly.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/2dcb761d940b0115b786ab3b6f336af7d94630f4\"\u003e\u003ccode\u003e2dcb761\u003c/code\u003e\u003c/a\u003e Add uniform exclusions for test.support.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/importlib_metadata/compare/v8.7.1...v9.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 7.2.0 to 7.4.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\u003e7.4.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix AttributeError in cluster metrics recording when connection is None or ClusterNode object instance is used to extract the connection info (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3999\"\u003e#3999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing security concern in \u003cstrong\u003erepr\u003c/strong\u003e methods for ConnectionPools - passwords might leak in plain text logs (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3998\"\u003e#3998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactored connection count and SCH metric collection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4001\"\u003e#4001\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧪 Experimental Features\u003c/h2\u003e\n\u003cp\u003e-Refactored health check logic for MultiDBClient (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3994\"\u003e#3994\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExpose basic Otel classes and functions to be importable through redis.observability to match the examples in the readthedocs (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3996\"\u003e#3996\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eOpenTelemetry Native Metrics Support for asynchronous clients\u003c/strong\u003e\nAdded comprehensive OpenTelemetry metrics support for asynchronous clients following the \u003ca href=\"https://opentelemetry.io/docs/specs/semconv/database/database-metrics/\"\u003eOpenTelemetry Database Client Semantic Conventions\u003c/a\u003e.\nMetric groups include:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCommand metrics: Operation duration with retry tracking\u003c/li\u003e\n\u003cli\u003eConnection basic: Connection count and creation time\u003c/li\u003e\n\u003cli\u003eResiliency: Errors, handoffs, timeout relaxation\u003c/li\u003e\n\u003cli\u003eConnection advanced: Wait time and use time\u003c/li\u003e\n\u003cli\u003ePubsub metrics: Published and received messages\u003c/li\u003e\n\u003cli\u003eStream metrics: Processing duration and maintenance notifications\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded OTel instrumentation and metrics export for async client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3977\"\u003e#3977\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[async] Adding access to cluster client's nodes_manager and set_response_callback in ClusterPipeline objects (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3989\"\u003e#3989\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(connection): Ensure we have an initialized protocol in connection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3981\"\u003e#3981\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: use KeysT for blpop and brpop keys parameter type annotation (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3987\"\u003e#3987\u003c/a\u003e \u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3990\"\u003e#3990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 6 to 7 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3985\"\u003e#3985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: replace 3 bare except clauses with except Exception (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3980\"\u003e#3980\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/turanalmammadov\"\u003e\u003ccode\u003e@​turanalmammadov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/haosenwang1018\"\u003e\u003ccode\u003e@​haosenwang1018\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/Medno\"\u003e\u003ccode\u003e@​Medno\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.2.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/b72f24ad6a2226d46aed770e18094a86117d2217\"\u003e\u003ccode\u003eb72f24a\u003c/code\u003e\u003c/a\u003e Updating lib version to 7.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/0a4e0afe36504c3fb6df1e38683ea946febac9d3\"\u003e\u003ccode\u003e0a4e0af\u003c/code\u003e\u003c/a\u003e Refactored health check logic for MultiDBClient (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3994\"\u003e#3994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/15492c9156d3ab8dce05360977480510cf24fbf9\"\u003e\u003ccode\u003e15492c9\u003c/code\u003e\u003c/a\u003e Refactored connection count and SCH metric collection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4001\"\u003e#4001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/cd964ac96649df872a051835e9a52e05a5090607\"\u003e\u003ccode\u003ecd964ac\u003c/code\u003e\u003c/a\u003e Expose basic Otel classes and funtions to be importable through redis.observa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/46ab74d02ed9b15176f67edb817de83524f8145a\"\u003e\u003ccode\u003e46ab74d\u003c/code\u003e\u003c/a\u003e Fixing security concern in \u003cstrong\u003erepr\u003c/strong\u003e methods for ConnectionPools - passwords m...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/26482dbaae38abdb1966d9b1c803331e2dab2053\"\u003e\u003ccode\u003e26482db\u003c/code\u003e\u003c/a\u003e Fix AttributeError in cluster metrics recording when connection is None or Cl...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/8ecbc7a728792ab9c71078cb330a64c225cb3351\"\u003e\u003ccode\u003e8ecbc7a\u003c/code\u003e\u003c/a\u003e Updating lib version to 7.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/11043df86ed5f892cde1f34f08f3450f13bb6339\"\u003e\u003ccode\u003e11043df\u003c/code\u003e\u003c/a\u003e typing: accept single-key input for blpop and brpop (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3990\"\u003e#3990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d9581250202123ebf68d299e8f2ea79fa9bd7210\"\u003e\u003ccode\u003ed958125\u003c/code\u003e\u003c/a\u003e fix: use KeysT for blpop and brpop keys parameter type annotation (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3987\"\u003e#3987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/75bf91b8a28bfc3f8417e58d1b78bd112ffcf6de\"\u003e\u003ccode\u003e75bf91b\u003c/code\u003e\u003c/a\u003e [async] Adding access to cluster client's nodes_manager and set_response_call...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v7.2.0...v7.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.32.5 to 2.33.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.33.1\u003c/h2\u003e\n\u003ch2\u003e2.33.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\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/ferdnyc\"\u003e\u003ccode\u003e@​ferdnyc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7277\"\u003epsf/requests#7277\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2331-2026-03-30\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2331-2026-03-30\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.33.0\u003c/h2\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that uses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report any gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts contents to a non-deterministic location to prevent malicious file replacement. This does not affect default usage of Requests, only applications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause malformed authentication to be applied to Requests on Python 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/M0d3v1\"\u003e\u003ccode\u003e@​M0d3v1\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6865\"\u003epsf/requests#6865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aminvakil\"\u003e\u003ccode\u003e@​aminvakil\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7220\"\u003epsf/requests#7220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/E8Price\"\u003e\u003ccode\u003e@​E8Price\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6960\"\u003epsf/requests#6960\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7244\"\u003epsf/requests#7244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/magsen\"\u003e\u003ccode\u003e@​magsen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6553\"\u003epsf/requests#6553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Rohan5commit\"\u003e\u003ccode\u003e@​Rohan5commit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7227\"\u003epsf/requests#7227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.33.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that\nuses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report\nany gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts\ncontents to a non-deterministic location to prevent malicious file\nreplacement. This does not affect default usage of Requests, only\napplications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause\nmalformed authentication to be applied to Requests on\nPython 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/111d2b77790bf49943c0dfa09b365371c24aec7e\"\u003e\u003ccode\u003e111d2b7\u003c/code\u003e\u003c/a\u003e v2.33.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/f0198e6dfc431a2293dc16e1b1e8fcddc910a7f3\"\u003e\u003ccode\u003ef0198e6\u003c/code\u003e\u003c/a\u003e Fix malformed value parsing for Content-Type (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc7dd0fc4d56e808bcdd85ac2d797b3107c89259\"\u003e\u003ccode\u003ebc7dd0f\u003c/code\u003e\u003c/a\u003e Fix cosmetic header validity parsing regex (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4443b1a847b190010c2972a658924b98b5db6360\"\u003e\u003ccode\u003e4443b1a\u003c/code\u003e\u003c/a\u003e Fix unintended test extra (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7306\"\u003e#7306\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/389eea58dfb2f2ee096421a812e3af29c0298951\"\u003e\u003ccode\u003e389eea5\u003c/code\u003e\u003c/a\u003e Cleanup extracted file after extract_zipped_path test (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7407309c8a8a73aa2f4337184025d440bbedab7a\"\u003e\u003ccode\u003e7407309\u003c/code\u003e\u003c/a\u003e Packaging: DRY out extras definition (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7277\"\u003e#7277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc04dfd6dad4cb02cd92f5daa81eb562d280a761\"\u003e\u003ccode\u003ebc04dfd\u003c/code\u003e\u003c/a\u003e v2.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/66d21cb07bd6255b1280291c4fafb71803cdb3b7\"\u003e\u003ccode\u003e66d21cb\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/8b9bc8fc0f63be84602387913c4b689f19efd028\"\u003e\u003ccode\u003e8b9bc8f\u003c/code\u003e\u003c/a\u003e Move badges to top of README (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7293\"\u003e#7293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e331a288f369973f5de0ec8901c94cae4fa87286\"\u003e\u003ccode\u003ee331a28\u003c/code\u003e\u003c/a\u003e Remove unused extraction call (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7292\"\u003e#7292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.33.1\"\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.53.0 to 2.58.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.58.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(ai) Redact base64 data URLs in image_url content blocks by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5953\"\u003e#5953\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(integrations) Instrument pyreqwest tracing by \u003ca href=\"https://github.com/servusdei2018\"\u003e\u003ccode\u003e@​servusdei2018\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5682\"\u003e#5682\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(litellm) Add async callbacks by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5969\"\u003e#5969\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eAnthropic\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCapture exceptions for \u003ccode\u003estream()\u003c/code\u003e calls by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5950\"\u003e#5950\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStop setting transaction status when child span fails by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5717\"\u003e#5717\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eOnly finish relevant spans in .create() patches by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5716\"\u003e#5716\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003ePydantic Ai\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdapt import for new library versions by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5984\"\u003e#5984\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse first-class hooks when available by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5947\"\u003e#5947\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(huggingface_hub) Stop setting transaction status when a child span fails by \u003ca href=\"https://github.com/Zenithatic\"\u003e\u003ccode\u003e@​Zenithatic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5952\"\u003e#5952\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(litellm) Avoid double span exits when streaming by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5933\"\u003e#5933\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(wsgi) Respect HTTP_X_FORWARDED_PROTO in request.url construction by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5963\"\u003e#5963\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003ch4\u003eLitellm\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in rate-limit test by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5975\"\u003e#5975\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in embedding tests by \u003ca href=\"https://github.com/al...\n\n_Description has been truncated_","html_url":"https://github.com/mrs-soft/fission-environments/pull/27","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrs-soft%2Ffission-environments/issues/27","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/27/packages"}},{"old_version":"7.4.1","new_version":"7.4.3","update_type":"patch","path":null,"pr_created_at":"2026-04-26T21:33:11.000Z","version_change":"7.4.1 → 7.4.3","issue":{"uuid":"4332039145","node_id":"PR_kwDORbMusc7VxcqB","number":76,"state":"open","title":"deps(backend): bump the python-minor group across 1 directory with 43 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-04-26T21:33:11.000Z","updated_at":"2026-04-26T21:34:35.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(backend): bump","group_name":"python-minor","update_count":43,"packages":[{"name":"fastapi","old_version":"0.136.0","new_version":"0.136.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"pydantic","old_version":"2.13.2","new_version":"2.13.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.13.1","new_version":"2.14.0","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"uvicorn","old_version":"0.44.0","new_version":"0.46.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"ruff","old_version":"0.15.11","new_version":"0.15.12","repository_url":"https://github.com/astral-sh/ruff"},{"name":"semgrep","old_version":"1.159.0","new_version":"1.161.0","repository_url":"https://github.com/semgrep/semgrep"},{"name":"langchain-core","old_version":"1.3.0","new_version":"1.3.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langgraph","old_version":"1.1.8","new_version":"1.1.9","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"anthropic","old_version":"0.96.0","new_version":"0.97.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"chardet","old_version":"7.4.1","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"click","old_version":"8.1.8","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"},{"name":"exceptiongroup","old_version":"1.2.2","new_version":"1.3.1","repository_url":"https://github.com/agronholm/exceptiongroup"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"jsonschema","old_version":"4.25.1","new_version":"4.26.0","repository_url":"https://github.com/python-jsonschema/jsonschema"},{"name":"langchain-classic","old_version":"1.0.3","new_version":"1.0.4","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-text-splitters","old_version":"1.1.1","new_version":"1.1.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langgraph-checkpoint","old_version":"4.0.1","new_version":"4.0.2","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langgraph-prebuilt","old_version":"1.0.9","new_version":"1.0.11","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langsmith","old_version":"0.7.30","new_version":"0.7.36","repository_url":"https://github.com/langchain-ai/langsmith-sdk"},{"name":"mako","old_version":"1.3.10","new_version":"1.3.11","repository_url":"https://github.com/sqlalchemy/mako"},{"name":"mcp","old_version":"1.23.3","new_version":"1.27.0","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"mpmath","old_version":"1.3.0","new_version":"1.4.1","repository_url":"https://github.com/mpmath/mpmath"},{"name":"opentelemetry-api","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-threading","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-sdk","old_version":"1.37.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.58b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"packaging","old_version":"26.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pathspec","old_version":"1.0.4","new_version":"1.1.0","repository_url":"https://github.com/cpburnz/python-pathspec"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.46.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"ruamel-yaml-clib","old_version":"0.2.14","new_version":"0.2.15"},{"name":"sse-starlette","old_version":"3.3.4","new_version":"3.4.1","repository_url":"https://github.com/sysid/sse-starlette"},{"name":"tomli","old_version":"2.0.2","new_version":"2.4.1","repository_url":"https://github.com/hukkin/tomli"},{"name":"torch","old_version":"2.10.0","new_version":"2.11.0","repository_url":"https://github.com/pytorch/pytorch"},{"name":"tzdata","old_version":"2026.1","new_version":"2026.2","repository_url":"https://github.com/python/tzdata"},{"name":"xxhash","old_version":"3.6.0","new_version":"3.7.0","repository_url":"https://github.com/ifduyue/python-xxhash"},{"name":"zipp","old_version":"3.23.0","new_version":"3.23.1","repository_url":"https://github.com/jaraco/zipp"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor group with 43 updates in the /apps/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.0` | `0.136.1` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.2` | `2.13.3` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.13.1` | `2.14.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.44.0` | `0.46.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.11` | `0.15.12` |\n| [semgrep](https://github.com/semgrep/semgrep) | `1.159.0` | `1.161.0` |\n| [langchain-core](https://github.com/langchain-ai/langchain) | `1.3.0` | `1.3.2` |\n| [langgraph](https://github.com/langchain-ai/langgraph) | `1.1.8` | `1.1.9` |\n| [anthropic](https://github.com/anthropics/anthropic-sdk-python) | `0.96.0` | `0.97.0` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.4.22` |\n| [chardet](https://github.com/chardet/chardet) | `7.4.1` | `7.4.3` |\n| [click](https://github.com/pallets/click) | `8.1.8` | `8.3.3` |\n| [exceptiongroup](https://github.com/agronholm/exceptiongroup) | `1.2.2` | `1.3.1` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.13` |\n| [jsonschema](https://github.com/python-jsonschema/jsonschema) | `4.25.1` | `4.26.0` |\n| [langchain-classic](https://github.com/langchain-ai/langchain) | `1.0.3` | `1.0.4` |\n| [langchain-text-splitters](https://github.com/langchain-ai/langchain) | `1.1.1` | `1.1.2` |\n| [langgraph-checkpoint](https://github.com/langchain-ai/langgraph) | `4.0.1` | `4.0.2` |\n| [langgraph-prebuilt](https://github.com/langchain-ai/langgraph) | `1.0.9` | `1.0.11` |\n| [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.7.30` | `0.7.36` |\n| [mako](https://github.com/sqlalchemy/mako) | `1.3.10` | `1.3.11` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.23.3` | `1.27.0` |\n| [mpmath](https://github.com/mpmath/mpmath) | `1.3.0` | `1.4.1` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-instrumentation-threading](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.41.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.58b0` | `0.62b1` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.62b1` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.2` |\n| [pathspec](https://github.com/cpburnz/python-pathspec) | `1.0.4` | `1.1.0` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.46.3` |\n| ruamel-yaml-clib | `0.2.14` | `0.2.15` |\n| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.3.4` | `3.4.1` |\n| [tomli](https://github.com/hukkin/tomli) | `2.0.2` | `2.4.1` |\n| [torch](https://github.com/pytorch/pytorch) | `2.10.0` | `2.11.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.1` | `2026.2` |\n| [xxhash](https://github.com/ifduyue/python-xxhash) | `3.6.0` | `3.7.0` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.0` | `3.23.1` |\n\n\nUpdates `fastapi` from 0.136.0 to 0.136.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.136.1\u003c/h2\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Update Pydantic v2 code to address deprecations. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15101\"\u003e#15101\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔨 Tweak translation script. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15174\"\u003e#15174\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 mkdocs-material from 9.7.1 to 9.7.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15408\"\u003e#15408\u003c/a\u003e by \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 inline-snapshot from 0.31.1 to 0.32.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15409\"\u003e#15409\u003c/a\u003e by \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 pytest-codspeed from 4.3.0 to 4.4.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15407\"\u003e#15407\u003c/a\u003e by \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 pytest-cov from 7.0.0 to 7.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15406\"\u003e#15406\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.14.1 to 3.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15405\"\u003e#15405\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump mypy from 1.19.1 to 1.20.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15410\"\u003e#15410\u003c/a\u003e by \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 python-dotenv from 1.2.1 to 1.2.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15400\"\u003e#15400\u003c/a\u003e by \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 0.52.1 to 1.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15397\"\u003e#15397\u003c/a\u003e by \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 pygithub from 2.8.1 to 2.9.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15396\"\u003e#15396\u003c/a\u003e by \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.12.0 to 2.12.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15393\"\u003e#15393\u003c/a\u003e by \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 zizmor from 1.23.1 to 1.24.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15394\"\u003e#15394\u003c/a\u003e by \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 strawberry-graphql from 0.312.3 to 0.314.3. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15395\"\u003e#15395\u003c/a\u003e by \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 python-multipart from 0.0.22 to 0.0.26. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15360\"\u003e#15360\u003c/a\u003e by \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 authlib from 1.6.9 to 1.6.11. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15373\"\u003e#15373\u003c/a\u003e by \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 aiohttp from 3.13.3 to 3.13.4. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15282\"\u003e#15282\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pygments from 2.19.2 to 2.20.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15263\"\u003e#15263\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 10.20.1 to 10.21.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15391\"\u003e#15391\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 pillow from 12.1.1 to 12.2.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15333\"\u003e#15333\u003c/a\u003e by \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 pytest from 9.0.2 to 9.0.3. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15334\"\u003e#15334\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/upload-artifact from 7.0.0 to 7.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15374\"\u003e#15374\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/cache from 5.0.4 to 5.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15385\"\u003e#15385\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove Zuplo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15369\"\u003e#15369\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove Speakeasy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15368\"\u003e#15368\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Add zizmor and fix audit findings. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15316\"\u003e#15316\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\u003c/blockquote\u003e\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/e54e5a8980ffa6d7ff68ee7b25a1c46036375521\"\u003e\u003ccode\u003ee54e5a8\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9a8a5fd99902c3b80d4cc94b85e120e2b808825f\"\u003e\u003ccode\u003e9a8a5fd\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7815a32f2ed177b8b786a48b3e0712c05b5c644f\"\u003e\u003ccode\u003e7815a32\u003c/code\u003e\u003c/a\u003e ⬆️ Update Pydantic v2 code to address deprecations (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15101\"\u003e#15101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ef1c927b0558d414e199a666833942a6fabb3a51\"\u003e\u003ccode\u003eef1c927\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/38039e12a86e67f2001b9b7d96c219691d6cb4af\"\u003e\u003ccode\u003e38039e1\u003c/code\u003e\u003c/a\u003e 🔨 Tweak translation script (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15174\"\u003e#15174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4fa826ce0a3b16884a04f51e5aac95d01790b599\"\u003e\u003ccode\u003e4fa826c\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c39415673e621665fdb7bbdde69beba7eb1dfd12\"\u003e\u003ccode\u003ec394156\u003c/code\u003e\u003c/a\u003e ⬆ Bump mkdocs-material from 9.7.1 to 9.7.6 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15408\"\u003e#15408\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ae230ad2f9d90a4e3f6222ff1a5d6e8da41ec0ad\"\u003e\u003ccode\u003eae230ad\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/d9eb39d1a1bf2f6e6e5d3a55088f61c712cb864e\"\u003e\u003ccode\u003ed9eb39d\u003c/code\u003e\u003c/a\u003e ⬆ Bump inline-snapshot from 0.31.1 to 0.32.6 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15409\"\u003e#15409\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4f8b5d14d324ae8e15cfae8d85adb4186d4c2175\"\u003e\u003ccode\u003e4f8b5d1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.0...0.136.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.2 to 2.13.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/9e9a11132c980c4ec84ff6d2df06d4c1a55ca8f3\"\u003e\u003ccode\u003e9e9a111\u003c/code\u003e\u003c/a\u003e Fix backported test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1ec8c6aa0cae1c78409c6f31af738a24e16c7124\"\u003e\u003ccode\u003e1ec8c6a\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/fb4f2044436e9fa4ff9745479ce263016a99c4d6\"\u003e\u003ccode\u003efb4f204\u003c/code\u003e\u003c/a\u003e Handle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.13.1 to 2.14.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.14.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix parsing env vars into Optional Strict types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/792\"\u003epydantic/pydantic-settings#792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RecursionError with mutually recursive models in CLI by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/794\"\u003epydantic/pydantic-settings#794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix env_file from model_config ignored in CliApp.run() (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/795\"\u003e#795\u003c/a\u003e) by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/796\"\u003epydantic/pydantic-settings#796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/798\"\u003epydantic/pydantic-settings#798\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/801\"\u003epydantic/pydantic-settings#801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump samuelcolvin/check-python-version from 4.1 to 5 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 4 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/803\"\u003epydantic/pydantic-settings#803\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 4 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/804\"\u003epydantic/pydantic-settings#804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 5 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/805\"\u003epydantic/pydantic-settings#805\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python from 5 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/806\"\u003epydantic/pydantic-settings#806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore chardet and group GitHub Actions in Dependabot by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/808\"\u003epydantic/pydantic-settings#808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/download-artifact from 4 to 8 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/809\"\u003epydantic/pydantic-settings#809\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/810\"\u003epydantic/pydantic-settings#810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport reading .env files from FIFOs (e.g. 1Password Environments) by \u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AliasChoices ignored when changing provider priority by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/813\"\u003epydantic/pydantic-settings#813\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve KeyError in run_subcommand for underscore field names by \u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/814\"\u003epydantic/pydantic-settings#814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eLiteral[numeric Enum]\u003c/code\u003e coercion for CLI and env vars by \u003ca href=\"https://github.com/m9810223\"\u003e\u003ccode\u003e@​m9810223\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/811\"\u003epydantic/pydantic-settings#811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nested discriminated unions not discovered by env/CLI providers by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/816\"\u003epydantic/pydantic-settings#816\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/820\"\u003epydantic/pydantic-settings#820\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCLI ensure env nested max split internally. by \u003ca href=\"https://github.com/kschwab\"\u003e\u003ccode\u003e@​kschwab\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/821\"\u003epydantic/pydantic-settings#821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/824\"\u003epydantic/pydantic-settings#824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eboto3-stubs\u003c/code\u003e to \u003ccode\u003etypes-boto3\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/831\"\u003epydantic/pydantic-settings#831\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI not recognizing field name with validate_by_name and AliasChoices by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/826\"\u003epydantic/pydantic-settings#826\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow customisation of the dotevn setting source to filter variables by \u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/833\"\u003epydantic/pydantic-settings#833\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce yamlfmt by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/836\"\u003epydantic/pydantic-settings#836\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump boto3 from 1.42.82 to 1.42.83 in the python-packages group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/837\"\u003epydantic/pydantic-settings#837\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce zizmor by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/838\"\u003epydantic/pydantic-settings#838\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CliPositionalArg[list[CustomType]] crash for custom types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/839\"\u003epydantic/pydantic-settings#839\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/842\"\u003epydantic/pydantic-settings#842\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/844\"\u003epydantic/pydantic-settings#844\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/847\"\u003epydantic/pydantic-settings#847\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to \u003ccode\u003ejson_schema_extra\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/843\"\u003epydantic/pydantic-settings#843\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.0 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/848\"\u003epydantic/pydantic-settings#848\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\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.13.1...v2.14.0\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.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/pydantic/pydantic-settings/commit/8916beeecc6d0510e3d0532a0ed839937400ddc3\"\u003e\u003ccode\u003e8916bee\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/848\"\u003e#848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/39e551c0910c85505b608ff85a103b2c9f7396c5\"\u003e\u003ccode\u003e39e551c\u003c/code\u003e\u003c/a\u003e Fix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to `json_schema_...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9ed7f48ea2c90f436a03b01f721fe6656c869b14\"\u003e\u003ccode\u003e9ed7f48\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/847\"\u003e#847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/617c690fb16c95eb0fb98fc88c0d6d82b9af4fa9\"\u003e\u003ccode\u003e617c690\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/844\"\u003e#844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/577c05f7e8ac25904da2381db51ed4ddd4b3e4fe\"\u003e\u003ccode\u003e577c05f\u003c/code\u003e\u003c/a\u003e Add note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/842\"\u003e#842\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/2355bc54e9d442ca7916f02de28d0c936e75441c\"\u003e\u003ccode\u003e2355bc5\u003c/code\u003e\u003c/a\u003e Fix CliPositionalArg[list[CustomType]] crash for custom types (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/839\"\u003e#839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/16bd6fd230d6280d52db6ce2a0ffef8f908cc89d\"\u003e\u003ccode\u003e16bd6fd\u003c/code\u003e\u003c/a\u003e Introduce zizmor (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/838\"\u003e#838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/df8b239fe09ba712767bdf378bc90627df375f04\"\u003e\u003ccode\u003edf8b239\u003c/code\u003e\u003c/a\u003e Bump boto3 from 1.42.82 to 1.42.83 in the python-packages group (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/837\"\u003e#837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c5401a27999cd6c0e93925deb0660cd51013c8b1\"\u003e\u003ccode\u003ec5401a2\u003c/code\u003e\u003c/a\u003e Introduce yamlfmt (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/836\"\u003e#836\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/953e28e6cfe9a9e536375d771a4ffd48535a4ab2\"\u003e\u003ccode\u003e953e28e\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/833\"\u003e#833\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.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.44.0 to 0.46.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.46.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2915\"\u003eKludex/uvicorn#2915\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2916\"\u003eKludex/uvicorn#2916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2917\"\u003eKludex/uvicorn#2917\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.45.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2903\"\u003eKludex/uvicorn#2903\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2905\"\u003eKludex/uvicorn#2905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2907\"\u003eKludex/uvicorn#2907\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2906\"\u003eKludex/uvicorn#2906\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert empty context for ASGI runs by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2911\"\u003eKludex/uvicorn#2911\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2912\"\u003eKludex/uvicorn#2912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2913\"\u003eKludex/uvicorn#2913\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Krishnachaitanyakc\"\u003e\u003ccode\u003e@​Krishnachaitanyakc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2870\"\u003eKludex/uvicorn#2870\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.46.0 (April 23, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2916\"\u003e#2916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2917\"\u003e#2917\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.45.0 (April 21, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2905\"\u003e#2905\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2913\"\u003e#2913\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Explicitly start ASGI run with empty context\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2903\"\u003e#2903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2906\"\u003e#2906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b224045f5900b7f766743bcb16ba9fc3adea2606\"\u003e\u003ccode\u003eb224045\u003c/code\u003e\u003c/a\u003e Version 0.46.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2918\"\u003e#2918\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7375b5bf66d962186d663e85615d4b4d956bf880\"\u003e\u003ccode\u003e7375b5b\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/d438fb16fe2d23c7bbc2ca7094645cff1f116458\"\u003e\u003ccode\u003ed438fb1\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3e6b96446653d0156434bce529a14c80764c9eda\"\u003e\u003ccode\u003e3e6b964\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2c423bd82be169459ea254a61476de34767e0326\"\u003e\u003ccode\u003e2c423bd\u003c/code\u003e\u003c/a\u003e Version 0.45.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7f027f8e25e47668a9c2ce8b5c21b35054c48d02\"\u003e\u003ccode\u003e7f027f8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/73a80c3cc87de269ed016e584a25e585ae6f2b44\"\u003e\u003ccode\u003e73a80c3\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45c0b568d38e9bf4f2f036bc2d79eb98b0e72f72\"\u003e\u003ccode\u003e45c0b56\u003c/code\u003e\u003c/a\u003e Revert empty context for ASGI runs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/850d92656de0cb5859ee5f6ba252e19ad3d38989\"\u003e\u003ccode\u003e850d926\u003c/code\u003e\u003c/a\u003e Raise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2906\"\u003e#2906\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/fdcacb4b83bc686ea1ba9e50ffe5b8cfe49b3e00\"\u003e\u003ccode\u003efdcacb4\u003c/code\u003e\u003c/a\u003e Accept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.44.0...0.46.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.11 to 0.15.12\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.12\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-04-24.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:ignore\u003c/code\u003e logical-line suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23404\"\u003e#23404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert preview changes to displayed diagnostic severity in LSP (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24789\"\u003e#24789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003etask-branch-as-short-circuit\u003c/code\u003e (\u003ccode\u003eAIR004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23579\"\u003e#23579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix \u003ccode\u003ebreak\u003c/code\u003e/\u003ccode\u003econtinue\u003c/code\u003e handling in \u003ccode\u003eloop-iterator-mutation\u003c/code\u003e (\u003ccode\u003eB909\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24440\"\u003e#24440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLC2701\u003c/code\u003e for type parameter scopes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24576\"\u003e#24576\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epandas-vet\u003c/code\u003e] Suggest \u003ccode\u003e.array\u003c/code\u003e as well in \u003ccode\u003ePD011\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24805\"\u003e#24805\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRespect default Unix permissions for cache files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24794\"\u003e#24794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLR0124\u003c/code\u003e description not to claim self-comparison always returns the same value (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24749\"\u003e#24749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Expand docs on reusable \u003ccode\u003eTypeVar\u003c/code\u003es and scoping (\u003ccode\u003eUP046\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24153\"\u003e#24153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove rules table accessibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24711\"\u003e#24711\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylwil3\"\u003e\u003ccode\u003e@​dylwil3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/woodruffw\"\u003e\u003ccode\u003e@​woodruffw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/avasis-ai\"\u003e\u003ccode\u003e@​avasis-ai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dev-iL\"\u003e\u003ccode\u003e@​Dev-iL\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/denyszhak\"\u003e\u003ccode\u003e@​denyszhak\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/amyreese\"\u003e\u003ccode\u003e@​amyreese\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/majiayu000\"\u003e\u003ccode\u003e@​majiayu000\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.12\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.12\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-04-24.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:ignore\u003c/code\u003e logical-line suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23404\"\u003e#23404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert preview changes to displayed diagnostic severity in LSP (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24789\"\u003e#24789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003etask-branch-as-short-circuit\u003c/code\u003e (\u003ccode\u003eAIR004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23579\"\u003e#23579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix \u003ccode\u003ebreak\u003c/code\u003e/\u003ccode\u003econtinue\u003c/code\u003e handling in \u003ccode\u003eloop-iterator-mutation\u003c/code\u003e (\u003ccode\u003eB909\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24440\"\u003e#24440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLC2701\u003c/code\u003e for type parameter scopes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24576\"\u003e#24576\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epandas-vet\u003c/code\u003e] Suggest \u003ccode\u003e.array\u003c/code\u003e as well in \u003ccode\u003ePD011\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24805\"\u003e#24805\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRespect default Unix permissions for cache files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24794\"\u003e#24794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLR0124\u003c/code\u003e description not to claim self-comparison always returns the same value (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24749\"\u003e#24749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Expand docs on reusable \u003ccode\u003eTypeVar\u003c/code\u003es and scoping (\u003ccode\u003eUP046\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24153\"\u003e#24153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove rules table accessibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24711\"\u003e#24711\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylwil3\"\u003e\u003ccode\u003e@​dylwil3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/woodruffw\"\u003e\u003ccode\u003e@​woodruffw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/avasis-ai\"\u003e\u003ccode\u003e@​avasis-ai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dev-iL\"\u003e\u003ccode\u003e@​Dev-iL\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/denyszhak\"\u003e\u003ccode\u003e@​denyszhak\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/amyreese\"\u003e\u003ccode\u003e@​amyreese\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/majiayu000\"\u003e\u003ccode\u003e@​majiayu000\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/66f93cf7ed4d36325f35a452e4afa28268fbcd28\"\u003e\u003ccode\u003e66f93cf\u003c/code\u003e\u003c/a\u003e Bump 0.15.12 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24815\"\u003e#24815\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/476a4d02e8e3b6c157ac39979d8b698a1b6baa91\"\u003e\u003ccode\u003e476a4d0\u003c/code\u003e\u003c/a\u003e [ty] Complete support for more detailed diagnostics on possibly unbound error...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ed669eab30095d6c51fe6cdef6050fb01276bcb3\"\u003e\u003ccode\u003eed669ea\u003c/code\u003e\u003c/a\u003e Implement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e73d952e43feb51356ee740c5a973fce81396ff6\"\u003e\u003ccode\u003ee73d952\u003c/code\u003e\u003c/a\u003e [ty] Include inferred type in \u003ccode\u003einvalid-key\u003c/code\u003e concise diagnostic for union/inte...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/80feb29b31cd98c093316df2e0407b0c70c01b55\"\u003e\u003ccode\u003e80feb29\u003c/code\u003e\u003c/a\u003e [ty] report only dead annotation-only locals as unused (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24811\"\u003e#24811\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0fbf2bc27336a3d17d39af52cf89b78dcda8c7c8\"\u003e\u003ccode\u003e0fbf2bc\u003c/code\u003e\u003c/a\u003e Drop deprecated license classifier (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24808\"\u003e#24808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/43b174cc7f2fcb0080bb1d4843cd4bf6b72bbe27\"\u003e\u003ccode\u003e43b174c\u003c/code\u003e\u003c/a\u003e [ty] Infer lambda parameter types with \u003ccode\u003eCallable\u003c/code\u003e type context (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24317\"\u003e#24317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4f449ae4a2377569330a5ab94799d389357b5a3f\"\u003e\u003ccode\u003e4f449ae\u003c/code\u003e\u003c/a\u003e [ty] Add error context for intersection types (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24772\"\u003e#24772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/5b4e753acb46e96ad408e4904c15308e33efe307\"\u003e\u003ccode\u003e5b4e753\u003c/code\u003e\u003c/a\u003e [ty] Add support for goto in literal enum member inlay hint (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24792\"\u003e#24792\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e7cc76275a758ce1c636ea1c2d091fd576aac794\"\u003e\u003ccode\u003ee7cc762\u003c/code\u003e\u003c/a\u003e [ty] Add error context for TypedDict assignments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24790\"\u003e#24790\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.11...0.15.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `semgrep` from 1.159.0 to 1.161.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.161.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.161.0\"\u003e1.161.0\u003c/a\u003e - 2026-04-22\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala 3.4+ trait parameters are now parsed correctly. (lang-73)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSemgrep's HTTP requests no longer log URLs above the debug level; full request\ndetails remain available when running with \u003ccode\u003eSEMGREP_LOG_SRCS=cohttp.client\u003c/code\u003e. (ENGINE-2712)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.160.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.160.0\"\u003e1.160.0\u003c/a\u003e - 2026-04-16\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala: Added tree-sitter parser for improved parsing accuracy with pfff fallback. (LANG-255)\u003c/li\u003e\n\u003cli\u003epro: taint: Improved support for variadic functions (LANG-375)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed performance issues during parsing Semgrep rules containing emoji or\nother non-BMP Unicode characters. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6070\"\u003egh-6070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning when semgrep-core rule validation fails and falls back to JSON\nschema validation, alongside details of the failure. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6071\"\u003egh-6071\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/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.161.0\"\u003e1.161.0\u003c/a\u003e - 2026-04-22\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala 3.4+ trait parameters are now parsed correctly. (lang-73)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSemgrep's HTTP requests no longer log URLs above the debug level; full request\ndetails remain available when running with \u003ccode\u003eSEMGREP_LOG_SRCS=cohttp.client\u003c/code\u003e. (ENGINE-2712)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.160.0\"\u003e1.160.0\u003c/a\u003e - 2026-04-16\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScala: Added tree-sitter parser for improved parsing accuracy with pfff fallback. (LANG-255)\u003c/li\u003e\n\u003cli\u003epro: taint: Improved support for variadic functions (LANG-375)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed performance issues during parsing Semgrep rules containing emoji or\nother non-BMP Unicode characters. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6070\"\u003egh-6070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning when semgrep-core rule validation fails and falls back to JSON\nschema validation, alongside details of the failure. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6071\"\u003egh-6071\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/semgrep/semgrep/commit/34b079df03bd8ed6860552adf3905cc5d146dc4d\"\u003e\u003ccode\u003e34b079d\u003c/code\u003e\u003c/a\u003e chore: release version 1.161.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/1e6302b4fde5950a805bf5c0abd7d879f11b9f6b\"\u003e\u003ccode\u003e1e6302b\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6115\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/9859b4e2e73cff0211d3b4463fe96ab334989c68\"\u003e\u003ccode\u003e9859b4e\u003c/code\u003e\u003c/a\u003e http_helpers: \u003ccode\u003escrub_uri\u003c/code\u003e for safer URI logging (semgrep/semgrep-proprietary#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/e2916c14861468bc7e2cee1f8b5276a76b91452c\"\u003e\u003ccode\u003ee2916c1\u003c/code\u003e\u003c/a\u003e scrub URLs from http_helpers logs and returned errors (semgrep/semgrep-propri...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/341da2a7ed8510686d9c43e69e6c396c54bb1dc3\"\u003e\u003ccode\u003e341da2a\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6099\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/eae9a00ede6425c3f8c9be3b2f5b78d7b92ec91b\"\u003e\u003ccode\u003eeae9a00\u003c/code\u003e\u003c/a\u003e fix: correct \u003ccode\u003eis_obrace\u003c/code\u003e to \u003ccode\u003eis_cbrace\u003c/code\u003e for closing brace count (semgrep/semg...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/d668b7179b3b3dbb210f35518595d242c667bea2\"\u003e\u003ccode\u003ed668b71\u003c/code\u003e\u003c/a\u003e chore(backend): deprecate scan endpoint v1 for semgrep ci (semgrep/semgrep-pr...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/d981dbfdf752e9cf9bc8a1a4f177b3d05a32c944\"\u003e\u003ccode\u003ed981dbf\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6098\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/2ee8536b33fad02ab3b63868014a72583ad108a6\"\u003e\u003ccode\u003e2ee8536\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6102\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/00fa4efaa465f3a58a18b511a4b12a165620069c\"\u003e\u003ccode\u003e00fa4ef\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6097\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/semgrep/semgrep/compare/v1.159.0...v1.161.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-core` from 1.3.0 to 1.3.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-core's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-core==1.3.2\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-core==1.3.1\u003c/p\u003e\n\u003cp\u003erelease(core): 1.3.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36990\"\u003e#36990\u003c/a\u003e)\nfeat(core): add content-block-centric streaming (v2) (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36834\"\u003e#36834\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain-core==1.3.1\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-core==1.3.0\u003c/p\u003e\n\u003cp\u003erelease(core): 1.3.1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36972\"\u003e#36972\u003c/a\u003e)\nfeat(core): allow _format_output to pass through list of ToolOutputMixin instances (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36963\"\u003e#36963\u003c/a\u003e)\nchore: bump nbconvert from 7.17.0 to 7.17.1 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36923\"\u003e#36923\u003c/a\u003e)\nfeat(core): Update inheritance behavior for tracer metadata for special keys (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36900\"\u003e#36900\u003c/a\u003e)\nchore: bump langsmith from 0.7.13 to 0.7.31 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36813\"\u003e#36813\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/fa0f0d8efa54005b9256f8d4b28d1ff770372901\"\u003e\u003ccode\u003efa0f0d8\u003c/code\u003e\u003c/a\u003e release(core): 1.3.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36990\"\u003e#36990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/9ce72eba9f6b3961d469a70b1b1980543f4cca91\"\u003e\u003ccode\u003e9ce72eb\u003c/code\u003e\u003c/a\u003e feat(core): add content-block-centric streaming (v2) (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36834\"\u003e#36834\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/889a45b664638ef646fa58257cfe263d44cb6c6a\"\u003e\u003ccode\u003e889a45b\u003c/code\u003e\u003c/a\u003e ci(infra): overlay local \u003ccode\u003elangchain-*\u003c/code\u003e installs for external partners (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36989\"\u003e#36989\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/ffaac42bf9e345ec1096d38965f36542a7b0467a\"\u003e\u003ccode\u003effaac42\u003c/code\u003e\u003c/a\u003e ci(infra): add \u003ccode\u003epytest-xdist\u003c/code\u003e to partner test groups (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36988\"\u003e#36988\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/cc2feb1aea239556fa427fd8bdabbae60f8279a6\"\u003e\u003ccode\u003ecc2feb1\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36982\"\u003e#36982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/3dd0ad958eb2d5a51a4055e104598bb26aeb3b65\"\u003e\u003ccode\u003e3dd0ad9\u003c/code\u003e\u003c/a\u003e release(fireworks): 1.2.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36978\"\u003e#36978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/7b09eb7bda4dbe99615ff5e5f74539aea682d718\"\u003e\u003ccode\u003e7b09eb7\u003c/code\u003e\u003c/a\u003e fix(fireworks): honor \u003ccode\u003emax_retries\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36973\"\u003e#36973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/d30ef8a8aa2edd47c614838c6be362456be5c2a5\"\u003e\u003ccode\u003ed30ef8a\u003c/code\u003e\u003c/a\u003e feat(fireworks): populate \u003ccode\u003eusage_metadata\u003c/code\u003e on streaming (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36977\"\u003e#36977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/2715a7499a642c99901e6cfe5e9a6ea3aecedb0f\"\u003e\u003ccode\u003e2715a74\u003c/code\u003e\u003c/a\u003e fix(fireworks): swap undeployed Kimi K2 slug in integration tests (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36975\"\u003e#36975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/2d3b49162caca316d9a24286421737471ea9e388\"\u003e\u003ccode\u003e2d3b491\u003c/code\u003e\u003c/a\u003e ci(infra): shorten working-directory dropdown labels (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/36974\"\u003e#36974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain-core==1.3.0...langchain-core==1.3.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langgraph` from 1.1.8 to 1.1.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langgraph/releases\"\u003elanggraph's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elanggraph==1.1.9\u003c/h2\u003e\n\u003cp\u003eChanges since 1.1.8\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003echore(langgraph): bump version 1.1.8 -\u0026gt; 1.1.9 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7563\"\u003e#7563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): don't propagate ReplayState to subgraphs on plain resume (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7561\"\u003e#7561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(langgraph): undo unnecessary changes in stream handler (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7536\"\u003e#7536\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/a529b9bede1f1b6ecada4f0cc0e5c4b83526e563\"\u003e\u003ccode\u003ea529b9b\u003c/code\u003e\u003c/a\u003e chore(langgraph): bump version 1.1.8 -\u0026gt; 1.1.9 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7563\"\u003e#7563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/0a26b471d34da94186bee8c48d0c463b5a3bd0a0\"\u003e\u003ccode\u003e0a26b47\u003c/code\u003e\u003c/a\u003e fix(langgraph): don't propagate ReplayState to subgraphs on plain resume (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7561\"\u003e#7561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/b674dd46228b0928a6bc0ad9a3d8e38ef28f6895\"\u003e\u003ccode\u003eb674dd4\u003c/code\u003e\u003c/a\u003e feat(prebuilt): expose available tools on ToolRuntime (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7512\"\u003e#7512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/8df0a377d00839bee0b7e9645b225716db8958d1\"\u003e\u003ccode\u003e8df0a37\u003c/code\u003e\u003c/a\u003e chore(langgraph): undo unnecessary changes in stream handler (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7536\"\u003e#7536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/216cf33a54d401d80338e2a0d22827b63310a3e0\"\u003e\u003ccode\u003e216cf33\u003c/code\u003e\u003c/a\u003e chore(deps): bump the pip group across 3 directories with 1 update (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7537\"\u003e#7537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/langchain-ai/langgraph/compare/1.1.8...1.1.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anthropic` from 0.96.0 to 0.97.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/releases\"\u003eanthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.97.0\u003c/h2\u003e\n\u003ch2\u003e0.97.0 (2026-04-23)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.96.0...v0.97.0\"\u003ev0.96.0...v0.97.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e CMA Memory public beta (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/fc30ebe5ca81204faa0b1d756b61dad176e37dcb\"\u003efc30ebe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix errors in api spec (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f946de8da00748b472489e93ab4920d64d1cb22d\"\u003ef946de8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore missing features (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/72212ab8408af389981e9e6b111c00460b2b17e4\"\u003e72212ab\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e optimize file structure copying in multipart requests (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/1f9eed3a953c8cef0967df8470e04f7ac8fe3235\"\u003e1f9eed3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd missing import (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/4b12f5e0f4c29a234cd05f93c603b9cae2011aaa\"\u003e4b12f5e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e more robust bootstrap script (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/7ed737089d1f28385ee827f601ba81f1935d0b6a\"\u003e7ed7370\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.22.1 (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a4b7184e57410ae92a409db5ee6fec90edceaa51\"\u003ea4b7184\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md\"\u003eanthropic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.97.0 (2026-04-23)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.96.0...v0.97.0\"\u003ev0.96.0...v0.97.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e CMA Memory public beta (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/fc30ebe5ca81204faa0b1d756b61dad176e37dcb\"\u003efc30ebe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix errors in api spec (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f946de8da00748b472489e93ab4920d64d1cb22d\"\u003ef946de8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore missing features (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/72212ab8408af389981e9e6b111c00460b2b17e4\"\u003e72212ab\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e optimize file structure copying in multipart requests (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/1f9eed3a953c8cef0967df8470e04f7ac8fe3235\"\u003e1f9eed3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd missing import (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/4b12f5e0f4c29a234cd05f93c603b9cae2011aaa\"\u003e4b12f5e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e more robust bootstrap script (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/7ed737089d1f28385ee827f601ba81f1935d0b6a\"\u003e7ed7370\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etests:\u003c/strong\u003e bump steady to v0.22.1 (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a4b7184e57410ae92a409db5ee6fec90edceaa51\"\u003ea4b7184\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/78c73600b714fcb036893768df8ee122f33d4cb3\"\u003e\u003ccode\u003e78c7360\u003c/code\u003e\u003c/a\u003e release: 0.97.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d274533036e250506f665011d8d3441ed5228944\"\u003e\u003ccode\u003ed274533\u003c/code\u003e\u003c/a\u003e chore: add missing import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/c078db11d55c5b0455272e85617d8c1cfe76180e\"\u003e\u003ccode\u003ec078db1\u003c/code\u003e\u003c/a\u003e fix(api): fix errors in api spec\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5807d0efd8fac5fb7323dbd8949a2df8528a3456\"\u003e\u003ccode\u003e5807d0e\u003c/code\u003e\u003c/a\u003e fix(api): restore missing features\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/2cb7a83a029aa3bd960536158f16231fe0ad6d0d\"\u003e\u003ccode\u003e2cb7a83\u003c/code\u003e\u003c/a\u003e feat(api): CMA Memory public beta\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/edbddf7715a78e56ab019737977e4e2db60acf1b\"\u003e\u003ccode\u003eedbddf7\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/4d3e27c78b404f7a3fcb7b1cd2221033e615574b\"\u003e\u003ccode\u003e4d3e27c\u003c/code\u003e\u003c/a\u003e chore(internal): more robust bootstrap script\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d2b3cda70e3c3b2bc153a9a486f90c3111bd4323\"\u003e\u003ccode\u003ed2b3cda\u003c/code\u003e\u003c/a\u003e chore(tests): bump steady to v0.22.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5871ccb66966dc2b6a3a33b8c8bf419512d830b8\"\u003e\u003ccode\u003e5871ccb\u003c/code\u003e\u003c/a\u003e perf(client): optimize file structure copying in multipart requests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b4fba031da1b33c80aa5104e84a7babda3b847f5\"\u003e\u003ccode\u003eb4fba03\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.96.0...v0.97.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.2.25 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/0a49067eb434e53e1f8df5f7707d5dc05ef9def4\"\u003e\u003ccode\u003e0a49067\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/403\"\u003e#403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/acf6ce8e39e3b125f4349e11904295e4fe4c1bed\"\u003e\u003ccode\u003eacf6ce8\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/feb0ed26163a9417ea0fb8eb52d47e79fcf202ab\"\u003e\u003ccode\u003efeb0ed2\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7.0.0 to 8.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/397\"\u003e#397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d9c11a50369cc377abb40f7909ded3d6da4d98a3\"\u003e\u003ccode\u003ed9c11a5\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6.0.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/396\"\u003e#396\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.04.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `chardet` from 7.4.1 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c...\n\n_Description has been truncated_","html_url":"https://github.com/AhmedAmineBejaoui/ai-code-review-platform/pull/76","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmedAmineBejaoui%2Fai-code-review-platform/issues/76","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/76/packages"}},{"old_version":"4.0.0","new_version":"7.4.3","update_type":"major","path":null,"pr_created_at":"2026-04-25T18:33:29.000Z","version_change":"4.0.0 → 7.4.3","issue":{"uuid":"4328917894","node_id":"PR_kwDOSMfTx87VoVUZ","number":6,"state":"closed","title":"chore(deps): bump chardet from 4.0.0 to 7.4.3","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-04-25T19:49:13.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-25T18:33:29.000Z","updated_at":"2026-04-25T19:49:15.000Z","time_to_close":4544,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"chardet","old_version":"4.0.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":null,"ecosystem":"pip"},"body":"Bumps [chardet](https://github.com/chardet/chardet) from 4.0.0 to 7.4.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/4.0.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chardet\u0026package-manager=pip\u0026previous-version=4.0.0\u0026new-version=7.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/wongcht/hk-bus-crawling/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/wongcht%2Fhk-bus-crawling/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"}},{"old_version":"5.2.0","new_version":"7.4.3","update_type":"major","path":null,"pr_created_at":"2026-04-24T16:11:17.000Z","version_change":"5.2.0 → 7.4.3","issue":{"uuid":"4324179046","node_id":"PR_kwDOMFeY887VZYDR","number":170,"state":"open","title":"python-deps(deps): bump the python-dependencies group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":["dependabot[bot]"],"locked":false,"comments_count":4,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-04-24T16:11:17.000Z","updated_at":"2026-04-24T16:24:22.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"python-deps(deps): bump","group_name":"python-dependencies","update_count":16,"packages":[{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"mkdocs-section-index","old_version":"0.3.11","new_version":"0.3.12","repository_url":"https://github.com/oprypin/mkdocs-section-index"},{"name":"mkdocstrings","old_version":"1.0.3","new_version":"1.0.4","repository_url":"https://github.com/mkdocstrings/mkdocstrings"},{"name":"packaging","old_version":"26.0","new_version":"26.1","repository_url":"https://github.com/pypa/packaging"},{"name":"pytest","old_version":"9.0.2","new_version":"9.0.3","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"chardet","old_version":"5.2.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"charset-normalizer","old_version":"3.4.6","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"click","old_version":"8.3.1","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pydantic](https://github.com/pydantic/pydantic), [pyright](https://github.com/RobertCraigie/pyright-python), [wheel](https://github.com/pypa/wheel), [mkdocs-section-index](https://github.com/oprypin/mkdocs-section-index), [mkdocstrings](https://github.com/mkdocstrings/mkdocstrings), [packaging](https://github.com/pypa/packaging), [pytest](https://github.com/pytest-dev/pytest), [certifi](https://github.com/certifi/python-certifi), [chardet](https://github.com/chardet/chardet), [charset-normalizer](https://github.com/jawah/charset_normalizer), [idna](https://github.com/kjd/idna), [click](https://github.com/pallets/click), [more-itertools](https://github.com/more-itertools/more-itertools), [pathspec](https://github.com/cpburnz/python-pathspec), [platformdirs](https://github.com/tox-dev/platformdirs) and [pydantic-core](https://github.com/pydantic/pydantic) to permit the latest version.\nUpdates `pydantic` from 2.12.5 to 2.13.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.0 2026-04-13\u003c/h2\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.13/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 contains the updated \u003ccode\u003epydantic.v1\u003c/code\u003e namespace, matching version 1.10.26 which includes support for Python 3.14.\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eSee the beta releases for all changes sinces 2.12.\u003c/p\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd zizmor for GitHub Actions workflow linting by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13039\"\u003e#13039\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate jiter to v0.14.0 to fix a segmentation fault on musl Linux by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13064\"\u003e#13064\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.1\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.13/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 contains the updated \u003ccode\u003epydantic.v1\u003c/code\u003e namespace, matching version 1.10.26 which includes support for Python 3.14.\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eSee the beta releases for all changes sinces 2.12.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow default factories of private attributes to take validated model data by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13013\"\u003e#13013\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\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/pydantic/pydantic/commit/9e9a11132c980c4ec84ff6d2df06d4c1a55ca8f3\"\u003e\u003ccode\u003e9e9a111\u003c/code\u003e\u003c/a\u003e Fix backported test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1ec8c6aa0cae1c78409c6f31af738a24e16c7124\"\u003e\u003ccode\u003e1ec8c6a\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/fb4f2044436e9fa4ff9745479ce263016a99c4d6\"\u003e\u003ccode\u003efb4f204\u003c/code\u003e\u003c/a\u003e Handle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/ca3ddd1149bd3b14273922a29da174804496a055\"\u003e\u003ccode\u003eca3ddd1\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/000e823a3ab7545b0c6064fde34effdcd02044ab\"\u003e\u003ccode\u003e000e823\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d45d8be3ffb6dfc6d0c64da6980140c91ff841fb\"\u003e\u003ccode\u003ed45d8be\u003c/code\u003e\u003c/a\u003e Prepare release 2.13.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/54aca609ce58e73dfe1c681d93432fbe3a4621da\"\u003e\u003ccode\u003e54aca60\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/46bf4fa648af3a1fbf4603a37f210e9d9c618357\"\u003e\u003ccode\u003e46bf4fa\u003c/code\u003e\u003c/a\u003e Fix Pydantic release workflow (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13067\"\u003e#13067\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1b359edab09c623464d23c6fd2503ae5ff276d43\"\u003e\u003ccode\u003e1b359ed\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13065\"\u003e#13065\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b1bf19445d8ac144a7a0e82674d2d87eebab6c18\"\u003e\u003ccode\u003eb1bf194\u003c/code\u003e\u003c/a\u003e Fix model equality when using runtime \u003ccode\u003eextra\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13062\"\u003e#13062\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.5...v2.13.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyright` to 1.1.409\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/RobertCraigie/pyright-python/commit/d7508e5425d3d02761d70dab1f9a2086573af429\"\u003e\u003ccode\u003ed7508e5\u003c/code\u003e\u003c/a\u003e [pyright updated to 1.1.409] Update Version (\u003ca href=\"https://redirect.github.com/RobertCraigie/pyright-python/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/RobertCraigie/pyright-python/compare/v1.1.408...v1.1.409\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `wheel` to 0.47.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/wheel/releases\"\u003ewheel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.47.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003ewheel info\u003c/code\u003e subcommand to display metadata about wheel files without unpacking them (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/639\"\u003e#639\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eWheelFile\u003c/code\u003e raising \u003ccode\u003eMissing RECORD file\u003c/code\u003e when the wheel filename contains uppercase characters (e.g. \u003ccode\u003eDjango-3.2.5.whl\u003c/code\u003e) but the \u003ccode\u003e.dist-info\u003c/code\u003e directory inside uses normalized lowercase naming (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/411\"\u003e#411\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/wheel/blob/main/docs/news.rst\"\u003ewheel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease Notes\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003e0.47.0 (2026-04-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003ewheel info\u003c/code\u003e subcommand to display metadata about wheel files without\nunpacking them (\u003ccode\u003e[#639](https://github.com/pypa/wheel/issues/639) \u0026lt;https://github.com/pypa/wheel/issues/639\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eWheelFile\u003c/code\u003e raising \u003ccode\u003eMissing RECORD file\u003c/code\u003e when the wheel filename contains\nuppercase characters (e.g. \u003ccode\u003eDjango-3.2.5.whl\u003c/code\u003e) but the \u003ccode\u003e.dist-info\u003c/code\u003e directory\ninside uses normalized lowercase naming\n(\u003ccode\u003e[#411](https://github.com/pypa/wheel/issues/411) \u0026lt;https://github.com/pypa/wheel/issues/411\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.3 (2026-01-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eImportError: cannot import name '_setuptools_logging' from 'wheel'\u003c/code\u003e when\ninstalled alongside an old version of setuptools and running the \u003ccode\u003ebdist_wheel\u003c/code\u003e\ncommand (\u003ccode\u003e[#676](https://github.com/pypa/wheel/issues/676) \u0026lt;https://github.com/pypa/wheel/issues/676\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.2 (2026-01-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRestored the \u003ccode\u003ebdist_wheel\u003c/code\u003e command for compatibility with \u003ccode\u003esetuptools\u003c/code\u003e older than\nv70.1\u003c/li\u003e\n\u003cli\u003eImporting \u003ccode\u003ewheel.bdist_wheel\u003c/code\u003e now emits a \u003ccode\u003eFutureWarning\u003c/code\u003e instead of a\n\u003ccode\u003eDeprecationWarning\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003ewheel unpack\u003c/code\u003e potentially altering the permissions of files outside of the\ndestination tree with maliciously crafted wheels (CVE-2026-24049)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.1 (2025-04-08)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTemporarily restored the \u003ccode\u003ewheel.macosx_libfile\u003c/code\u003e module\n(\u003ccode\u003e[#659](https://github.com/pypa/wheel/issues/659) \u0026lt;https://github.com/pypa/wheel/issues/659\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.0 (2025-04-03)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.8\u003c/li\u003e\n\u003cli\u003eRemoved the \u003ccode\u003ebdist_wheel\u003c/code\u003e setuptools command implementation and entry point.\nThe \u003ccode\u003ewheel.bdist_wheel\u003c/code\u003e module is now just an alias to\n\u003ccode\u003esetuptools.command.bdist_wheel\u003c/code\u003e, emitting a deprecation warning on import.\u003c/li\u003e\n\u003cli\u003eRemoved vendored \u003ccode\u003epackaging\u003c/code\u003e in favor of a run-time dependency on it\u003c/li\u003e\n\u003cli\u003eMade the \u003ccode\u003ewheel.metadata\u003c/code\u003e module private (with a deprecation warning if it's\nimported\u003c/li\u003e\n\u003cli\u003eMade the \u003ccode\u003ewheel.cli\u003c/code\u003e package private (no deprecation warning)\u003c/li\u003e\n\u003cli\u003eFixed an exception when calling the \u003ccode\u003econvert\u003c/code\u003e command with an empty description\nfield\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.45.1 (2024-11-23)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed pure Python wheels converted from eggs and wininst files having the ABI tag in\nthe file name\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/efd83a750f07a33462ea2eed365fd8dac9e51442\"\u003e\u003ccode\u003eefd83a7\u003c/code\u003e\u003c/a\u003e Created a new release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/bb69216d35588c2a0febc2d9a130727fe6e46ee3\"\u003e\u003ccode\u003ebb69216\u003c/code\u003e\u003c/a\u003e Reordered the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/d5a1763ce927618bfa7d82abe334d0d14a93cc37\"\u003e\u003ccode\u003ed5a1763\u003c/code\u003e\u003c/a\u003e fix(wheelfile): resolve .dist-info path case-insensitively when reading wheel...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/5718957928ece25eb0d1c12023c71dea4fcb5cf9\"\u003e\u003ccode\u003e5718957\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/625806845ae5756be3cc0f9d44832c29079c0954\"\u003e\u003ccode\u003e6258068\u003c/code\u003e\u003c/a\u003e chore: log_level is better than log_cli_level (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/2975debc789682b3a448b134611acc6962a93eb3\"\u003e\u003ccode\u003e2975deb\u003c/code\u003e\u003c/a\u003e Require tox \u0026gt;= 4.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/47674ba770e5ee72d679b7eb32b558e0c177640d\"\u003e\u003ccode\u003e47674ba\u003c/code\u003e\u003c/a\u003e chore: add check-sdist to checks (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/681\"\u003e#681\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/56223f6f8dfa8d3d40923f24dcf159204698d7b6\"\u003e\u003ccode\u003e56223f6\u003c/code\u003e\u003c/a\u003e \u003ccode\u003e__package__\u003c/code\u003e → \u003ccode\u003e__spec__.parent\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/679\"\u003e#679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/0ce509e02dc3cd1b7b0bdf868482de062b3c21c3\"\u003e\u003ccode\u003e0ce509e\u003c/code\u003e\u003c/a\u003e Added the wheel info subcommand (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/669\"\u003e#669\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/39039c0f3446c1ed5ec52621e98bc2bad8178a06\"\u003e\u003ccode\u003e39039c0\u003c/code\u003e\u003c/a\u003e Improved the index page\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/wheel/compare/0.46.3...0.47.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-section-index` from 0.3.11 to 0.3.12\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/releases\"\u003emkdocs-section-index's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.3.12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeclare support of \u003ca href=\"https://pypi.org/project/properdocs-theme-readthedocs/\"\u003eproperdocs-theme-readthedocs\u003c/a\u003e, such that there is no warning printed for it - \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/fefc63086bfe41d0bd91f7541721ab4f96db25dc\"\u003ehttps://github.com/oprypin/mkdocs-section-index/commit/fefc63086bfe41d0bd91f7541721ab4f96db25dc\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/compare/v0.3.11...v0.3.12\"\u003ehttps://github.com/oprypin/mkdocs-section-index/compare/v0.3.11...v0.3.12\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/oprypin/mkdocs-section-index/commit/869bbda96ac29b178cddfff57cabe8884563afde\"\u003e\u003ccode\u003e869bbda\u003c/code\u003e\u003c/a\u003e v0.3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/5ec1820d48bed54a880405edc93f1ce682e004d6\"\u003e\u003ccode\u003e5ec1820\u003c/code\u003e\u003c/a\u003e Fix a doc link so it doesn't only work on GitHub\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/2a898e8022f22bfd86ba5b8c60e0b0a0cc6089e9\"\u003e\u003ccode\u003e2a898e8\u003c/code\u003e\u003c/a\u003e Update docs dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/fefc63086bfe41d0bd91f7541721ab4f96db25dc\"\u003e\u003ccode\u003efefc630\u003c/code\u003e\u003c/a\u003e Declare support of properdocs-theme-readthedocs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/4d758be189becb315f12607146737c83ca922a3b\"\u003e\u003ccode\u003e4d758be\u003c/code\u003e\u003c/a\u003e Update deps, enable more lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oprypin/mkdocs-section-index/commit/8cea221e6781c7e616cba249f46c957408a91590\"\u003e\u003ccode\u003e8cea221\u003c/code\u003e\u003c/a\u003e Drop Python 3.9, switch doc building to ProperDocs\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/oprypin/mkdocs-section-index/compare/v0.3.11...v0.3.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocstrings` from 1.0.3 to 1.0.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases\"\u003emkdocstrings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.4\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.4\"\u003e1.0.4\u003c/a\u003e - 2026-04-15\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003eCompare with 1.0.3\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd timeout when downloading inventories (10 seconds) (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e3d1969a\u003c/a\u003e by Simon Lloyd). \u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/819\"\u003eIssue-819\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/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md\"\u003emkdocstrings's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.4\"\u003e1.0.4\u003c/a\u003e - 2026-04-15\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003eCompare with 1.0.3\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd timeout when downloading inventories (10 seconds) (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e3d1969a\u003c/a\u003e by Simon Lloyd). \u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/819\"\u003eIssue-819\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/mkdocstrings/mkdocstrings/commit/a938528b51b42cde52465d06d8b1a52484837366\"\u003e\u003ccode\u003ea938528\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/1eaa2242ec33e4b6ce666f0bbc25391f2a72c1d2\"\u003e\u003ccode\u003e1eaa224\u003c/code\u003e\u003c/a\u003e ci: Lint and type-check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/80e090d0bfbfa5688639e78559a4bb7bd3f7a55b\"\u003e\u003ccode\u003e80e090d\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/5f82a5822c50dc928ee4a133c1445543d3afa393\"\u003e\u003ccode\u003e5f82a58\u003c/code\u003e\u003c/a\u003e chore: Template upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e\u003ccode\u003e3d1969a\u003c/code\u003e\u003c/a\u003e fix: Add timeout when downloading inventories (10 seconds)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/a0c47b9992416cf02b8dfc7a76a6c5503e98cd9c\"\u003e\u003ccode\u003ea0c47b9\u003c/code\u003e\u003c/a\u003e docs: Fix broken link in README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/e500a2b416656ede76aac316304415e428dd0aa1\"\u003e\u003ccode\u003ee500a2b\u003c/code\u003e\u003c/a\u003e chore: Update sponsors section in README\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `packaging` from 26.0 to 26.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/releases\"\u003epackaging's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.1\u003c/h2\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cdel\u003ePEP 783: add handling for Emscripten wheel tags by \u003ca href=\"https://github.com/hoodmane\"\u003e\u003ccode\u003e@​hoodmane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/804\"\u003epypa/packaging#804\u003c/a\u003e\u003c/del\u003e (old name used in implementation, will be fixed in next release)\u003c/li\u003e\n\u003cli\u003ePEP 803: add handling for the \u003ccode\u003eabi3.abi3t\u003c/code\u003e free-threading tag by \u003ca href=\"https://github.com/ngoldbaum\"\u003e\u003ccode\u003e@​ngoldbaum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1099\"\u003epypa/packaging#1099\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePEP 723: add \u003ccode\u003epackaging.dependency_groups\u003c/code\u003e module, based on the \u003ccode\u003edependency-groups\u003c/code\u003e package by \u003ca href=\"https://github.com/sirosen\"\u003e\u003ccode\u003e@​sirosen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1065\"\u003epypa/packaging#1065\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.direct_url\u003c/code\u003e module by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/944\"\u003epypa/packaging#944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.errors\u003c/code\u003e module by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1071\"\u003epypa/packaging#1071\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e using ranges (new internals that will be expanded in future versions) by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1119\"\u003epypa/packaging#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecreate_compatible_tags_selector\u003c/code\u003e to select compatible tags by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1110\"\u003epypa/packaging#1110\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ekey\u003c/code\u003e argument to \u003ccode\u003eSpecifierSet.filter()\u003c/code\u003e by \u003ca href=\"https://github.com/frostming\"\u003e\u003ccode\u003e@​frostming\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1068\"\u003epypa/packaging#1068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003e\u0026amp;\u003c/code\u003e and \u003ccode\u003e|\u003c/code\u003e for \u003ccode\u003eMarker\u003c/code\u003e's by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1146\"\u003epypa/packaging#1146\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNormalize \u003ccode\u003eVersion.__replace__\u003c/code\u003e and add \u003ccode\u003eVersion.from_parts\u003c/code\u003e by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1078\"\u003epypa/packaging#1078\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd an option to validate compressed tag set sort order in \u003ccode\u003eparse_wheel_filename\u003c/code\u003e by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1150\"\u003epypa/packaging#1150\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBehavior adaptations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow exclusion of pre-releases for \u003ccode\u003e\u0026lt;V.postN\u003c/code\u003e to match spec by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1140\"\u003epypa/packaging#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNarrow exclusion of post-releases for \u003ccode\u003e\u0026gt;V\u003c/code\u003e to match spec by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1141\"\u003epypa/packaging#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003eformat_full_version\u003c/code\u003e to \u003ccode\u003e_format_full_version\u003c/code\u003e to make it visibly private by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1125\"\u003epypa/packaging#1125\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRestrict local version to ASCII by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1102\"\u003epypa/packaging#1102\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePylock (PEP 751) updates:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd pylock \u003ccode\u003eselect\u003c/code\u003e function by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1092\"\u003epypa/packaging#1092\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocument pylock \u003ccode\u003eselect()\u003c/code\u003e method and \u003ccode\u003ePylockSelectError\u003c/code\u003e by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1153\"\u003epypa/packaging#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003efilename\u003c/code\u003e property to \u003ccode\u003ePackageSdist\u003c/code\u003e and \u003ccode\u003ePackageWheel\u003c/code\u003e, more validation by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1095\"\u003epypa/packaging#1095\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGive preference to path over url by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1128\"\u003epypa/packaging#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate name/version consistency in file names by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1114\"\u003epypa/packaging#1114\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e\u0026gt;\u003c/code\u003e comparison for versions with dev+local segments by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1097\"\u003epypa/packaging#1097\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix incorrect self-comparison for \u003ccode\u003eInfinityType\u003c/code\u003e and \u003ccode\u003eNegativeInfinityType\u003c/code\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1093\"\u003epypa/packaging#1093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCanonicalize when deduplicating specifiers in \u003ccode\u003eSpecifierSet\u003c/code\u003e by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1109\"\u003epypa/packaging#1109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix charset error message formatting by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1121\"\u003epypa/packaging#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle the \u003ccode\u003ekey\u003c/code\u003e parameter in \u003ccode\u003eSpecifierSet.filter\u003c/code\u003e when specifiers are empty and prerelease is \u003ccode\u003eFalse\u003c/code\u003e by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1096\"\u003epypa/packaging#1096\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStandardize inner components of \u003ccode\u003erepr\u003c/code\u003e output by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1090\"\u003epypa/packaging#1090\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSpecifier\u003c/code\u003e's \u003ccode\u003e===\u003c/code\u003e uses original string, not normalized, when available by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1124\"\u003epypa/packaging#1124\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate int-max-str-digits \u003ccode\u003eValueError\u003c/code\u003e by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1155\"\u003epypa/packaging#1155\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePerformance:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd fast path for parsing simple versions (digits and dots only) by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1082\"\u003epypa/packaging#1082\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd fast path for \u003ccode\u003eVersion\u003c/code\u003e to \u003ccode\u003eVersion\u003c/code\u003e comparison by skipping \u003ccode\u003e_key\u003c/code\u003e property by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1083\"\u003epypa/packaging#1083\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache \u003ccode\u003eVersion\u003c/code\u003e hash value in dedicated slot by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1118\"\u003epypa/packaging#1118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eOverhaul \u003ccode\u003e_cmpkey\u003c/code\u003e to remove use of custom objects by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1116\"\u003epypa/packaging#1116\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip \u003ccode\u003e__replace__\u003c/code\u003e in Specifier comparison if not needed by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1081\"\u003epypa/packaging#1081\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSpecifierSet\u003c/code\u003e use \u003ccode\u003etuple\u003c/code\u003e instead of \u003ccode\u003efrozenset\u003c/code\u003e for \u003ccode\u003e_specs\u003c/code\u003e by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1108\"\u003epypa/packaging#1108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSpeed up complex \u003ccode\u003eSpecifierSet\u003c/code\u003e filtering by implementing cost-based ordering by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1105\"\u003epypa/packaging#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/blob/main/CHANGELOG.rst\"\u003epackaging's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e26.1 - 2026-04-14\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\nFeatures:\n\u003cul\u003e\n\u003cli\u003ePEP 783: add handling for Emscripten wheel tags in (:pull:\u003ccode\u003e804\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePEP 803: add handling for the \u003ccode\u003eabi3.abi3t\u003c/code\u003e free-threading tag in (:pull:\u003ccode\u003e1099\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePEP 723: add \u003ccode\u003epackaging.dependency_groups\u003c/code\u003e module, based on the \u003ccode\u003edependency-groups\u003c/code\u003e package in (:pull:\u003ccode\u003e1065\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.direct_url\u003c/code\u003e module in (:pull:\u003ccode\u003e944\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.errors\u003c/code\u003e module in (:pull:\u003ccode\u003e1071\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e using ranges (new internals that will be expanded in future versions) in (:pull:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecreate_compatible_tags_selector\u003c/code\u003e to select compatible tags in (:pull:\u003ccode\u003e1110\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ekey\u003c/code\u003e argument to \u003ccode\u003eSpecifierSet.filter()\u003c/code\u003e in (:pull:\u003ccode\u003e1068\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003e\u0026amp;amp;\u003c/code\u003e and \u003ccode\u003e|\u003c/code\u003e for \u003ccode\u003eMarker\u003c/code\u003e's in (:pull:\u003ccode\u003e1146\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eNormalize \u003ccode\u003eVersion.__replace__\u003c/code\u003e and add \u003ccode\u003eVersion.from_parts\u003c/code\u003e in (:pull:\u003ccode\u003e1078\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd an option to validate compressed tag set sort order in \u003ccode\u003eparse_wheel_filename\u003c/code\u003e in (:pull:\u003ccode\u003e1150\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBehavior adaptations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow exclusion of pre-releases for \u003ccode\u003e\u0026amp;lt;V.postN\u003c/code\u003e to match spec in (:pull:\u003ccode\u003e1140\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eNarrow exclusion of post-releases for \u003ccode\u003e\u0026amp;gt;V\u003c/code\u003e to match spec in (:pull:\u003ccode\u003e1141\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003eformat_full_version\u003c/code\u003e to \u003ccode\u003e_format_full_version\u003c/code\u003e to make it visibly private in (:pull:\u003ccode\u003e1125\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict local version to ASCII in (:pull:\u003ccode\u003e1102\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePylock (PEP 751) updates:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd pylock \u003ccode\u003eselect\u003c/code\u003e function in (:pull:\u003ccode\u003e1092\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDocument pylock \u003ccode\u003eselect()\u003c/code\u003e method and \u003ccode\u003ePylockSelectError\u003c/code\u003e in (:pull:\u003ccode\u003e1153\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003efilename\u003c/code\u003e property to \u003ccode\u003ePackageSdist\u003c/code\u003e and \u003ccode\u003ePackageWheel\u003c/code\u003e, more validation in (:pull:\u003ccode\u003e1095\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eGive preference to path over url in (:pull:\u003ccode\u003e1128\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eValidate name/version consistency in file names in (:pull:\u003ccode\u003e1114\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e\u0026amp;gt;\u003c/code\u003e comparison for versions with dev+local segments in (:pull:\u003ccode\u003e1097\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix incorrect self-comparison for \u003ccode\u003eInfinityType\u003c/code\u003e and \u003ccode\u003eNegativeInfinityType\u003c/code\u003e in (:pull:\u003ccode\u003e1093\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eCanonicalize when deduplicating specifiers in \u003ccode\u003eSpecifierSet\u003c/code\u003e in (:pull:\u003ccode\u003e1109\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix charset error message formatting in (:pull:\u003ccode\u003e1121\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eHandle the \u003ccode\u003ekey\u003c/code\u003e parameter in \u003ccode\u003eSpecifierSet.filter\u003c/code\u003e when specifiers are empty and prerelease is \u003ccode\u003eFalse\u003c/code\u003e in (:pull:\u003ccode\u003e1096\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eStandardize inner components of \u003ccode\u003erepr\u003c/code\u003e output in (:pull:\u003ccode\u003e1090\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSpecifier\u003c/code\u003e's \u003ccode\u003e===\u003c/code\u003e uses original string, not normalized, when available in (:pull:\u003ccode\u003e1124\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePropagate int-max-str-digits \u003ccode\u003eValueError\u003c/code\u003e in (:pull:\u003ccode\u003e1155\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePerformance:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd fast path for parsing simple versions (digits and dots only) in (:pull:\u003ccode\u003e1082\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd fast path for \u003ccode\u003eVersion\u003c/code\u003e to \u003ccode\u003eVersion\u003c/code\u003e comparison by skipping \u003ccode\u003e_key\u003c/code\u003e property in (:pull:\u003ccode\u003e1083\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eCache \u003ccode\u003eVersion\u003c/code\u003e hash value in dedicated slot in (:pull:\u003ccode\u003e1118\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eOverhaul \u003ccode\u003e_cmpkey\u003c/code\u003e to remove use of custom objects in (:pull:\u003ccode\u003e1116\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eSkip \u003ccode\u003e__replace__\u003c/code\u003e in Specifier comparison if not needed in (:pull:\u003ccode\u003e1081\u003c/code\u003e)\u003cbr /\u003e\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/c1a88a3e035e8bfe47dbc957f4a2493e8a7b4f3c\"\u003e\u003ccode\u003ec1a88a3\u003c/code\u003e\u003c/a\u003e Bump for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/702c25ecc297054f9597acda987a75dd6833acf5\"\u003e\u003ccode\u003e702c25e\u003c/code\u003e\u003c/a\u003e docs: update changelog for 26.1 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1156\"\u003e#1156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/3f4f5d46808f51709aba8341d4121f20752b3235\"\u003e\u003ccode\u003e3f4f5d4\u003c/code\u003e\u003c/a\u003e Implement \u003ccode\u003eis_unsatisfiable\u003c/code\u003e on \u003ccode\u003eSpecifierSet\u003c/code\u003e using ranges (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/06c6555f44f0f7b84459c876375c5b1d52ee7fef\"\u003e\u003ccode\u003e06c6555\u003c/code\u003e\u003c/a\u003e Propagate int-max-str-digits ValueError (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1155\"\u003e#1155\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/905c90c1eb8c77dede11899194ca4b0f5eaf188d\"\u003e\u003ccode\u003e905c90c\u003c/code\u003e\u003c/a\u003e feat: option to validate compressed tag set sort order in `parse_wheel_filena...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/af0026cff97a8f28d165d6ac4afb58b2cdc8ffc5\"\u003e\u003ccode\u003eaf0026c\u003c/code\u003e\u003c/a\u003e docs(pylock): document select() method and PylockSelectError (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1153\"\u003e#1153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/668da8662a112036e4850b68980790cb2d10dae9\"\u003e\u003ccode\u003e668da86\u003c/code\u003e\u003c/a\u003e Rename format_full_version to _format_full_version to make it visibly private...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/f294d529e2634798a98fd9cee6708307a5c1792c\"\u003e\u003ccode\u003ef294d52\u003c/code\u003e\u003c/a\u003e tests: do not reload the tags module (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1152\"\u003e#1152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/2c6c7dfa2d406e44b91f3f8d26eeed72437c9435\"\u003e\u003ccode\u003e2c6c7df\u003c/code\u003e\u003c/a\u003e feat: add handling for Emscripten wheels tags per PEP 783 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/804\"\u003e#804\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/6762eea4de40da02c119d02cc77c907c6b446b86\"\u003e\u003ccode\u003e6762eea\u003c/code\u003e\u003c/a\u003e docs(markers): document \u0026amp; and | operators for combining Marker objects (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1151\"\u003e#1151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/packaging/compare/26.0...26.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 9.0.2 to 9.0.3\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.0.3\u003c/h2\u003e\n\u003ch1\u003epytest 9.0.3 (2026-04-07)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12444\"\u003e#12444\u003c/a\u003e: Fixed \u003ccode\u003epytest.approx\u003c/code\u003e which now correctly takes into account \u003ccode\u003e~collections.abc.Mapping\u003c/code\u003e keys order to compare them.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13634\"\u003e#13634\u003c/a\u003e: Blocking a \u003ccode\u003econftest.py\u003c/code\u003e file using the \u003ccode\u003e-p no:\u003c/code\u003e option is now explicitly disallowed.\u003c/p\u003e\n\u003cp\u003ePreviously this resulted in an internal assertion failure during plugin loading.\u003c/p\u003e\n\u003cp\u003ePytest now raises a clear \u003ccode\u003eUsageError\u003c/code\u003e explaining that conftest files are not plugins and cannot be disabled via \u003ccode\u003e-p\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/13734\"\u003e#13734\u003c/a\u003e: Fixed crash when a test raises an exceptiongroup with \u003ccode\u003e__tracebackhide__ = True\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/14195\"\u003e#14195\u003c/a\u003e: Fixed an issue where non-string messages passed to \u003c!-- raw HTML omitted --\u003eunittest.TestCase.subTest()\u003c!-- raw HTML omitted --\u003e were not printed.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14343\"\u003e#14343\u003c/a\u003e: Fixed use of insecure temporary directory (CVE-2025-71176).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13388\"\u003e#13388\u003c/a\u003e: Clarified documentation for \u003ccode\u003e-p\u003c/code\u003e vs \u003ccode\u003ePYTEST_PLUGINS\u003c/code\u003e plugin loading and fixed an incorrect \u003ccode\u003e-p\u003c/code\u003e example.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13731\"\u003e#13731\u003c/a\u003e: Clarified that capture fixtures (e.g. \u003ccode\u003ecapsys\u003c/code\u003e and \u003ccode\u003ecapfd\u003c/code\u003e) take precedence over the \u003ccode\u003e-s\u003c/code\u003e / \u003ccode\u003e--capture=no\u003c/code\u003e command-line options in \u003ccode\u003eAccessing captured output from a test function \u0026lt;accessing-captured-output\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14088\"\u003e#14088\u003c/a\u003e: Clarified that the default \u003ccode\u003epytest_collection\u003c/code\u003e hook sets \u003ccode\u003esession.items\u003c/code\u003e before it calls \u003ccode\u003epytest_collection_finish\u003c/code\u003e, not after.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14255\"\u003e#14255\u003c/a\u003e: TOML integer log levels must be quoted: Updating reference documentation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12689\"\u003e#12689\u003c/a\u003e: The test reports are now published to Codecov from GitHub Actions.\nThe test statistics is visible \u003ca href=\"https://app.codecov.io/gh/pytest-dev/pytest/tests\"\u003eon the web interface\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e-- by \u003ccode\u003ealeguy02\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/a7d58d7a21b78581e636bbbdea13c66ad1657c1e\"\u003e\u003ccode\u003ea7d58d7\u003c/code\u003e\u003c/a\u003e Prepare release version 9.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/089d98199c253d8f89a040243bc4f2aa6cd5ab22\"\u003e\u003ccode\u003e089d981\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14366\"\u003e#14366\u003c/a\u003e from bluetech/revert-14193-backport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/8127eaf4ab7f6b2fdd0dc1b38343ec97aeef05ac\"\u003e\u003ccode\u003e8127eaf\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Fix: assertrepr_compare respects dict insertion order (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14050\"\u003e#14050\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14193\"\u003e#14193\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/99a7e6029e7a6e8d53e5df114b1346e035370241\"\u003e\u003ccode\u003e99a7e60\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14363\"\u003e#14363\u003c/a\u003e from pytest-dev/patchback/backports/9.0.x/95d8423bd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ddee02a578da30dd43aedc39c1c1f1aaadfcee95\"\u003e\u003ccode\u003eddee02a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14343\"\u003e#14343\u003c/a\u003e from bluetech/cve-2025-71176-simple\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/74eac6916fee34726cb194f16c516e96fbd29619\"\u003e\u003ccode\u003e74eac69\u003c/code\u003e\u003c/a\u003e doc: Update training info (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14298\"\u003e#14298\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14301\"\u003e#14301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f92dee777cfdb77d1c43633d02766ddf1f07c869\"\u003e\u003ccode\u003ef92dee7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14267\"\u003e#14267\u003c/a\u003e from pytest-dev/patchback/backports/9.0.x/d6fa26c62...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7ee58acc8777c31ac6cf388d01addf5a414a7439\"\u003e\u003ccode\u003e7ee58ac\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12378\"\u003e#12378\u003c/a\u003e from Pierre-Sassoulas/fix-implicit-str-concat-and-d...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/37da870d37e3a2f5177cae075c7b9ae279432bf8\"\u003e\u003ccode\u003e37da870\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14259\"\u003e#14259\u003c/a\u003e from mitre88/patch-4 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14268\"\u003e#14268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c34bfa3b7acb65b594707c714f1d8461b0304eed\"\u003e\u003ccode\u003ec34bfa3\u003c/code\u003e\u003c/a\u003e Add explanation for string context diffs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14257\"\u003e#14257\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14266\"\u003e#14266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.0.2...9.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.2.25 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/0a49067eb434e53e1f8df5f7707d5dc05ef9def4\"\u003e\u003ccode\u003e0a49067\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/403\"\u003e#403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/acf6ce8e39e3b125f4349e11904295e4fe4c1bed\"\u003e\u003ccode\u003eacf6ce8\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/feb0ed26163a9417ea0fb8eb52d47e79fcf202ab\"\u003e\u003ccode\u003efeb0ed2\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7.0.0 to 8.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/397\"\u003e#397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d9c11a50369cc377abb40f7909ded3d6da4d98a3\"\u003e\u003ccode\u003ed9c11a5\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6.0.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/396\"\u003e#396\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.04.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `chardet` from 5.2.0 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.6 to 3.4.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.7\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/0f07891bf516b5d5231f1bd4dd2d8da7d4d09a9a\"\u003e\u003ccode\u003e0f07891\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/729\"\u003e#729\u003c/a\u003e from jawah/release-3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fdbeb299479e8f4d737e4d227cd0b2bd5d273dc0\"\u003e\u003ccode\u003efdbeb29\u003c/code\u003e\u003c/a\u003e chore: update dev, and ci requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b66f922bfbdbdd9dd46af18a8964d4fb888756d4\"\u003e\u003ccode\u003eb66f922\u003c/code\u003e\u003c/a\u003e chore: add ft classifier\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/f94249d0a2c712f2d03124f4de6b77f5e03aaa96\"\u003e\u003ccode\u003ef94249d\u003c/code\u003e\u003c/a\u003e chore: add test cases for utf_7 recent fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/95c866f6c984bbd043e7e3ed0628aa4f3f8d5a26\"\u003e\u003ccode\u003e95c866f\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/4f429bb764c7e893f99bb4bceb60856da1baacfb\"\u003e\u003ccode\u003e4f429bb\u003c/code\u003e\u003c/a\u003e chore: bump mypy pre-commit to v1.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b579cd6cab9bd83aa3fc0ca169d4df022bf4888c\"\u003e\u003ccode\u003eb579cd6\u003c/code\u003e\u003c/a\u003e fix: correctly remove SIG remnant in utf-7 decoded string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/58bf944a77cc0883fc46a6ee8edac3549fea5d59\"\u003e\u003ccode\u003e58bf944\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump github/codeql-action from 4.32.4 to 4.35.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/44cf8a1b676a2532a8f1694e62e4f4f98f9132e1\"\u003e\u003ccode\u003e44cf8a1\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/362bc20073f737b1ba4ca2f68cffb0c4cc024d20\"\u003e\u003ccode\u003e362bc20\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump docker/setup-qemu-action from 3.7.0 to 4.0.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.6...3.4.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.11 to 3.13\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.rst\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e3.13 (2026-04-22)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect classification error for codepoint U+A7F1\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e3.12 (2026-04-21)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 17.0.0.\u003c/li\u003e\n\u003cli\u003eIssue a deprecation warning for the transitional argument.\u003c/li\u003e\n\u003cli\u003eAdded lazy-loading to provide some performance improvements.\u003c/li\u003e\n\u003cli\u003eRemoved vestiges of code related to Python 2 support, including\nsegmentation of data structures specific to Jython.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Rodrigo Nogueira for contributions to this release.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/89cdfd27338896cee6b1ee18e64c96ac28684ce0\"\u003e\u003ccode\u003e89cdfd2\u003c/code\u003e\u003c/a\u003e Release v3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1eb068687543118147417a8d8a70674e2c172891\"\u003e\u003ccode\u003e1eb0686\u003c/code\u003e\u003c/a\u003e Pre-release 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5f20d1e41eea3b3873d18d83d7a384784f72a92e\"\u003e\u003ccode\u003e5f20d1e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/220\"\u003e#220\u003c/a\u003e from kjd/unicode-next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/4ea84252ab21e62a79e5a3273746112b5dcfb810\"\u003e\u003ccode\u003e4ea8425\u003c/code\u003e\u003c/a\u003e Regenerate idnadata.py with correct NFKC_CF data\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/fd47341a08bbdcffda33694211ca4de10170cd41\"\u003e\u003ccode\u003efd47341\u003c/code\u003e\u003c/a\u003e Use NFKC_CF from Unicode data files instead of Python's unicodedata module\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/a5304a4cdbd7b31595f8ac42ffdfa88f5b936467\"\u003e\u003ccode\u003ea5304a4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/219\"\u003e#219\u003c/a\u003e from kjd/release-3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d80d6f9254d699961fa2c669a1534cde9d4ee5b6\"\u003e\u003ccode\u003ed80d6f9\u003c/code\u003e\u003c/a\u003e Release v3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1bb44ddb3f2a9dcf97a6ac11aba34e5b6ed31291\"\u003e\u003ccode\u003e1bb44dd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/218\"\u003e#218\u003c/a\u003e from kjd/release-candidate-3.12rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/909c49d15b8d159be163bccc7972116baffdb47b\"\u003e\u003ccode\u003e909c49d\u003c/code\u003e\u003c/a\u003e Release candidate for 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c5459a10370f005dc09921aee3201b5a45699f9d\"\u003e\u003ccode\u003ec5459a1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/217\"\u003e#217\u003c/a\u003e from kjd/housekeeping-2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.11...v3.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.1 to 8.3.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.3.3\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.3 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.3.3/\"\u003ehttps://pypi.org/project/click/8.3.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-3\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-3\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/1026\"\u003e#1026\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1477\"\u003e#1477\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2775\"\u003e#2775\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3298\"\u003e#3298\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3299\"\u003e#3299\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3238\"\u003e#3238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3224\"\u003e#3224\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/654\"\u003e#654\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/824\"\u003e#824\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/843\"\u003e#843\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/951\"\u003e#951\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3235\"\u003e#3235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3177\"\u003e#3177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2836\"\u003e#2836\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2837\"\u003e#2837\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3165\"\u003e#3165\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3262\"\u003e#3262\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3280\"\u003e#3280\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. \u003ca href=\"https://redirect....\n\n_Description has been truncated_","html_url":"https://github.com/tektronix/tm_data_types/pull/170","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tektronix%2Ftm_data_types/issues/170","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/170/packages"}},{"old_version":"\u003c6.0.0,\u003e=5.0.0","new_version":"\u003e=7.4.3,\u003c8.0.0","update_type":"minor","path":null,"pr_created_at":"2026-04-22T02:44:40.000Z","version_change":"\u003c6.0.0,\u003e=5.0.0 → \u003e=7.4.3,\u003c8.0.0","issue":{"uuid":"4306414716","node_id":"PR_kwDONitdnM7UfVNC","number":15,"state":"open","title":"build(deps): update chardet requirement from \u003c6.0.0,\u003e=5.0.0 to \u003e=7.4.3,\u003c8.0.0","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-04-22T02:44:40.000Z","updated_at":"2026-04-22T02:44:41.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): update","packages":[{"name":"chardet","old_version":"\u003c6.0.0,\u003e=5.0.0","new_version":"\u003e=7.4.3,\u003c8.0.0","repository_url":"https://github.com/chardet/chardet"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [chardet](https://github.com/chardet/chardet) 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/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.0.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore 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/humblebeeai/module-python-template/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/humblebeeai%2Fmodule-python-template/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"}},{"old_version":"5.2.0","new_version":"7.4.3","update_type":"major","path":"/backend","pr_created_at":"2026-04-20T10:08:03.000Z","version_change":"5.2.0 → 7.4.3","issue":{"uuid":"4294846669","node_id":"PR_kwDON2Hsu87T54QE","number":271,"state":"closed","title":"chore(backend)(deps): bump chardet from 5.2.0 to 7.4.3 in /backend","user":"dependabot[bot]","labels":["backend","dependencies"],"assignees":[],"locked":false,"comments_count":5,"pull_request":true,"closed_at":"2026-04-24T07:44:25.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-20T10:08:03.000Z","updated_at":"2026-04-24T07:44:34.000Z","time_to_close":336982,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(backend)(deps)","packages":[{"name":"chardet","old_version":"5.2.0","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps [chardet](https://github.com/chardet/chardet) from 5.2.0 to 7.4.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/5.2.0...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chardet\u0026package-manager=pip\u0026previous-version=5.2.0\u0026new-version=7.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/berntpopp/hnf1b-db/pull/271","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/berntpopp%2Fhnf1b-db/issues/271","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/271/packages"}},{"old_version":"6.0.0.post1","new_version":"7.4.3","update_type":"major","path":null,"pr_created_at":"2026-04-20T06:48:55.000Z","version_change":"6.0.0.post1 → 7.4.3","issue":{"uuid":"4293658924","node_id":"PR_kwDORK4Qs87T2DKP","number":26,"state":"closed","title":"Bump the pip group across 1 directory with 13 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-04-27T06:56:57.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-20T06:48:55.000Z","updated_at":"2026-04-27T06:56:59.000Z","time_to_close":605282,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip","update_count":13,"packages":[{"name":"chardet","old_version":"6.0.0.post1","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"},{"name":"charset-normalizer","old_version":"3.4.4","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.3.1","new_version":"8.3.2","repository_url":"https://github.com/pallets/click"},{"name":"gevent","old_version":"25.9.1","new_version":"26.4.0","repository_url":"https://github.com/gevent/gevent"},{"name":"greenlet","old_version":"3.3.2","new_version":"3.4.0","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"hiredis","old_version":"3.3.0","new_version":"3.3.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"importlib-metadata","old_version":"8.7.1","new_version":"9.0.0","repository_url":"https://github.com/python/importlib_metadata"},{"name":"redis","old_version":"7.2.0","new_version":"7.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"requests","old_version":"2.32.5","new_version":"2.33.1","repository_url":"https://github.com/psf/requests"},{"name":"sentry-sdk","old_version":"2.53.0","new_version":"2.58.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"werkzeug","old_version":"3.1.6","new_version":"3.1.8","repository_url":"https://github.com/pallets/werkzeug"},{"name":"zipp","old_version":"3.23.0","new_version":"3.23.1","repository_url":"https://github.com/jaraco/zipp"},{"name":"zope-interface","old_version":"8.2","new_version":"8.3","repository_url":"https://github.com/zopefoundation/zope.interface"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip group with 13 updates in the /python directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [chardet](https://github.com/chardet/chardet) | `6.0.0.post1` | `7.4.3` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.4` | `3.4.7` |\n| [click](https://github.com/pallets/click) | `8.3.1` | `8.3.2` |\n| [gevent](https://github.com/gevent/gevent) | `25.9.1` | `26.4.0` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.3.2` | `3.4.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.3.0` | `3.3.1` |\n| [importlib-metadata](https://github.com/python/importlib_metadata) | `8.7.1` | `9.0.0` |\n| [redis](https://github.com/redis/redis-py) | `7.2.0` | `7.4.0` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.1` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.53.0` | `2.58.0` |\n| [werkzeug](https://github.com/pallets/werkzeug) | `3.1.6` | `3.1.8` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.0` | `3.23.1` |\n| [zope-interface](https://github.com/zopefoundation/zope.interface) | `8.2` | `8.3` |\n\n\nUpdates `chardet` from 6.0.0.post1 to 7.4.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/6.0.0.post1...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.4 to 3.4.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.7\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\u003cbr /\u003e\nmypyc changed the usual binary output for the optimized wheel. Beware, especially if using PyInstaller or alike. See \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/714\"\u003ejawah/charset_normalizer#714\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/0f07891bf516b5d5231f1bd4dd2d8da7d4d09a9a\"\u003e\u003ccode\u003e0f07891\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/729\"\u003e#729\u003c/a\u003e from jawah/release-3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fdbeb299479e8f4d737e4d227cd0b2bd5d273dc0\"\u003e\u003ccode\u003efdbeb29\u003c/code\u003e\u003c/a\u003e chore: update dev, and ci requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b66f922bfbdbdd9dd46af18a8964d4fb888756d4\"\u003e\u003ccode\u003eb66f922\u003c/code\u003e\u003c/a\u003e chore: add ft classifier\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/f94249d0a2c712f2d03124f4de6b77f5e03aaa96\"\u003e\u003ccode\u003ef94249d\u003c/code\u003e\u003c/a\u003e chore: add test cases for utf_7 recent fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/95c866f6c984bbd043e7e3ed0628aa4f3f8d5a26\"\u003e\u003ccode\u003e95c866f\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/4f429bb764c7e893f99bb4bceb60856da1baacfb\"\u003e\u003ccode\u003e4f429bb\u003c/code\u003e\u003c/a\u003e chore: bump mypy pre-commit to v1.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b579cd6cab9bd83aa3fc0ca169d4df022bf4888c\"\u003e\u003ccode\u003eb579cd6\u003c/code\u003e\u003c/a\u003e fix: correctly remove SIG remnant in utf-7 decoded string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/58bf944a77cc0883fc46a6ee8edac3549fea5d59\"\u003e\u003ccode\u003e58bf944\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump github/codeql-action from 4.32.4 to 4.35.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/44cf8a1b676a2532a8f1694e62e4f4f98f9132e1\"\u003e\u003ccode\u003e44cf8a1\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/362bc20073f737b1ba4ca2f68cffb0c4cc024d20\"\u003e\u003ccode\u003e362bc20\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump docker/setup-qemu-action from 3.7.0 to 4.0.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.4...3.4.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.1 to 8.3.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.3.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.3.2/\"\u003ehttps://pypi.org/project/click/8.3.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/29\"\u003ehttps://github.com/pallets/click/milestone/29\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eflag_value\u003c/code\u003e when \u003ccode\u003eis_flag=False\u003c/code\u003e to allow such options to be\nused without an explicit value. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3084\"\u003e#3084\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3152\"\u003e#3152\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHide \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values as \u003ccode\u003eNone\u003c/code\u003e when using \u003ccode\u003elookup_default()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3136\"\u003e#3136\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3199\"\u003e#3199\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3202\"\u003e#3202\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3209\"\u003e#3209\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3212\"\u003e#3212\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3224\"\u003e#3224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent \u003ccode\u003e_NamedTextIOWrapper\u003c/code\u003e from closing streams owned by \u003ccode\u003eStreamMixer\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/824\"\u003e#824\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2991\"\u003e#2991\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2993\"\u003e#2993\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3110\"\u003e#3110\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3139\"\u003e#3139\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3140\"\u003e#3140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd comprehensive tests for \u003ccode\u003eCliRunner\u003c/code\u003e stream lifecycle, covering\nlogging interaction, multi-threaded safety, and sequential invocation\nisolation. Add high-iteration stress tests behind a \u003ccode\u003estress\u003c/code\u003e marker\nwith a dedicated CI job. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3139\"\u003e#3139\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix callable \u003ccode\u003eflag_value\u003c/code\u003e being instantiated when used as a default via\n\u003ccode\u003edefault=True\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3121\"\u003e#3121\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3201\"\u003e#3201\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3213\"\u003e#3213\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3225\"\u003e#3225\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.rst\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.3.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-02\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eflag_value\u003c/code\u003e when \u003ccode\u003eis_flag=False\u003c/code\u003e to allow such options to be\nused without an explicit value. :issue:\u003ccode\u003e3084\u003c/code\u003e :pr:\u003ccode\u003e3152\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eHide \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values as \u003ccode\u003eNone\u003c/code\u003e when using \u003ccode\u003elookup_default()\u003c/code\u003e.\n:issue:\u003ccode\u003e3136\u003c/code\u003e :pr:\u003ccode\u003e3199\u003c/code\u003e :pr:\u003ccode\u003e3202\u003c/code\u003e :pr:\u003ccode\u003e3209\u003c/code\u003e :pr:\u003ccode\u003e3212\u003c/code\u003e :pr:\u003ccode\u003e3224\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePrevent \u003ccode\u003e_NamedTextIOWrapper\u003c/code\u003e from closing streams owned by \u003ccode\u003eStreamMixer\u003c/code\u003e.\n:issue:\u003ccode\u003e824\u003c/code\u003e :issue:\u003ccode\u003e2991\u003c/code\u003e :issue:\u003ccode\u003e2993\u003c/code\u003e :issue:\u003ccode\u003e3110\u003c/code\u003e :pr:\u003ccode\u003e3139\u003c/code\u003e :pr:\u003ccode\u003e3140\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd comprehensive tests for \u003ccode\u003eCliRunner\u003c/code\u003e stream lifecycle, covering\nlogging interaction, multi-threaded safety, and sequential invocation\nisolation. Add high-iteration stress tests behind a \u003ccode\u003estress\u003c/code\u003e marker\nwith a dedicated CI job. :pr:\u003ccode\u003e3139\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix callable \u003ccode\u003eflag_value\u003c/code\u003e being instantiated when used as a default via\n\u003ccode\u003edefault=True\u003c/code\u003e. :issue:\u003ccode\u003e3121\u003c/code\u003e :pr:\u003ccode\u003e3201\u003c/code\u003e :pr:\u003ccode\u003e3213\u003c/code\u003e :pr:\u003ccode\u003e3225\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/052c006033729bbb422cbdad0c4fee988ecb5aa5\"\u003e\u003ccode\u003e052c006\u003c/code\u003e\u003c/a\u003e Change update release date.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/502b7ce7b131473ef00a3586e60bb000f33b4c43\"\u003e\u003ccode\u003e502b7ce\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' of \u003ca href=\"https://github.com/pallets/click\"\u003ehttps://github.com/pallets/click\u003c/a\u003e into release-8.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/a0a37e411820861d48e21b131fdd840abaf746e0\"\u003e\u003ccode\u003ea0a37e4\u003c/code\u003e\u003c/a\u003e Change publish to werkzeug latest. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3301\"\u003e#3301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/57be6fc2b40eb40279d022e6aabc983ee0dfb7a9\"\u003e\u003ccode\u003e57be6fc\u003c/code\u003e\u003c/a\u003e Change publish to werkzeug latest.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/781d6a88bdd30229e72a84cd6753b0235f339679\"\u003e\u003ccode\u003e781d6a8\u003c/code\u003e\u003c/a\u003e Update publish workflows (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3266\"\u003e#3266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/ff795b66ba945239c779b528171f5fe4536cf844\"\u003e\u003ccode\u003eff795b6\u003c/code\u003e\u003c/a\u003e Update precommit pins with tox\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/dd87ef4f9fa7d6f13e14885e9a6842a21ededebc\"\u003e\u003ccode\u003edd87ef4\u003c/code\u003e\u003c/a\u003e Update github action pins with tox\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/93d3f9d22e90035bc2b51c2183c15bd4a021376f\"\u003e\u003ccode\u003e93d3f9d\u003c/code\u003e\u003c/a\u003e Release version 8.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/3299ba1a8a5de34b24a7226a683a837d8a0857e7\"\u003e\u003ccode\u003e3299ba1\u003c/code\u003e\u003c/a\u003e Add missing PR to changelog. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3264\"\u003e#3264\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b7f62c4d002e5b5bca3ebef6b995b7338740fe6f\"\u003e\u003ccode\u003eb7f62c4\u003c/code\u003e\u003c/a\u003e Add missing PR to changelog.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.3.1...8.3.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gevent` from 25.9.1 to 26.4.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/2a096a958289611925b4b4475aaefe74815b6b0f\"\u003e\u003ccode\u003e2a096a9\u003c/code\u003e\u003c/a\u003e Preparing release 26.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/e80421d28dd4281c6ae78dd8eb2a83df85d39b0a\"\u003e\u003ccode\u003ee80421d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2171\"\u003e#2171\u003c/a\u003e from gevent/ci-py-ver-updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/6cfa49b74367e979f27db238f929508ec2a00dcf\"\u003e\u003ccode\u003e6cfa49b\u003c/code\u003e\u003c/a\u003e test__ssl.py: PROTOCOL_TLS deprecation fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/e2ec5ebbe3e10cea407bc28283cc906b809467c9\"\u003e\u003ccode\u003ee2ec5eb\u003c/code\u003e\u003c/a\u003e Fix deprecations about use of SSLContext without setting a protocol.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/38904026b3329e6afb630a2d6e72221952e5678e\"\u003e\u003ccode\u003e3890402\u003c/code\u003e\u003c/a\u003e lint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/26b5b7f500b9b9f71faa63e4d829df0b3f59018c\"\u003e\u003ccode\u003e26b5b7f\u003c/code\u003e\u003c/a\u003e psutil 6 deprecated .connections, use replacement .net_connections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/cbbd53e99c9c9a2cdb40c39fc271066157956a4d\"\u003e\u003ccode\u003ecbbd53e\u003c/code\u003e\u003c/a\u003e Clean up some warnings from leakcheck.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/384070642a1704389707f0a7805809d704da7d75\"\u003e\u003ccode\u003e3840706\u003c/code\u003e\u003c/a\u003e test__util is getting extra greenlets when combined with test__threadpool on ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/408aeebcdbe47c967fb964d0bbd63dde824e2975\"\u003e\u003ccode\u003e408aeeb\u003c/code\u003e\u003c/a\u003e test__select: libuv on recent versions of Python isn't producing the OSError ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/6b6ee4e25969046d0dae28ccc0cbcf6096be3d2d\"\u003e\u003ccode\u003e6b6ee4e\u003c/code\u003e\u003c/a\u003e Update python versions tested in CI.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gevent/gevent/compare/25.9.1...26.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.3.2 to 3.4.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-greenlet/greenlet/blob/master/CHANGES.rst\"\u003egreenlet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.4.0 (2026-04-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ePublish binary wheels for RiscV 64.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix multiple rare crash paths during interpreter shutdown.\u003c/p\u003e\n\u003cp\u003eNote that this now relies on the \u003ccode\u003eatexit\u003c/code\u003e module, and introduces\nsubtle API changes during interpreter shutdown (for example,\n\u003ccode\u003egetcurrent\u003c/code\u003e is no longer available once the \u003ccode\u003eatexit\u003c/code\u003e callback fires).\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR [#499](https://github.com/python-greenlet/greenlet/issues/499) \u0026lt;https://github.com/python-greenlet/greenlet/pull/499\u0026gt;\u003c/code\u003e_ by Nicolas\nBouvrette.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAddress the results of an automated code audit performed by\nDaniel Diniz. This includes several minor correctness changes that\ntheoretically could have been crashing bugs, but typically only in\nvery rare circumstances.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR 502 \u0026lt;https://github.com/python-greenlet/greenlet/pull/502\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix several race conditions that could arise in free-threaded\nbuilds when using greenlet objects from multiple threads, some of\nwhich could lead to assertion failures or interpreter crashes.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003eissue 503 \u0026lt;https://github.com/python-greenlet/greenlet/issues/503\u0026gt;\u003c/code\u003e_, with\nthanks to Nitay Dariel and Daniel Diniz.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/df6734edbef6a0e54ecc4ba4735d93ae6d721095\"\u003e\u003ccode\u003edf6734e\u003c/code\u003e\u003c/a\u003e Preparing release 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/0f860756608b767b2ed70f935053b319d1a1b828\"\u003e\u003ccode\u003e0f86075\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/504\"\u003e#504\u003c/a\u003e from python-greenlet/freethreading-fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/459657482f3efaee294edff672bde45ac3fac208\"\u003e\u003ccode\u003e4596574\u003c/code\u003e\u003c/a\u003e TLBC: crash appears to still happen on CI 3.14t ubuntu. Re-enable workaround.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/2f4a1cf53fa282ab28ea4815164a9cb09b9320ce\"\u003e\u003ccode\u003e2f4a1cf\u003c/code\u003e\u003c/a\u003e Make green_switch (python level greenlet.switch) and green_throw check for (p...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/a0c2a2a7519985d5fe2c034a54f1a0fed82a5905\"\u003e\u003ccode\u003ea0c2a2a\u003c/code\u003e\u003c/a\u003e Fix unused variable warning when asserts are disabled.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/8688581392187d68f35180148fcd6fb4fd9a972f\"\u003e\u003ccode\u003e8688581\u003c/code\u003e\u003c/a\u003e gcc was complaining about an incomplete std::atomic type. make sure we includ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/449c76045b71f7f96c48e8d62672e5382b17cc3d\"\u003e\u003ccode\u003e449c760\u003c/code\u003e\u003c/a\u003e Make MainGreenlet._thread_state atomic; we use it for cross thread checking a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/f840e00dea524c20801bcb4f8764b968590eb6ba\"\u003e\u003ccode\u003ef840e00\u003c/code\u003e\u003c/a\u003e Add critical sections to greenlet attribute accessors.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/6b281d3eca96ec82a87067b2016241296e4c60e9\"\u003e\u003ccode\u003e6b281d3\u003c/code\u003e\u003c/a\u003e test_contextvars: No need for the fallback case where contextvars isn't avail...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/f52615ae64f73b19e53e71cd1e12cbb1841246ff\"\u003e\u003ccode\u003ef52615a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/502\"\u003e#502\u003c/a\u003e from python-greenlet/devdanzin-audit\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.3.2...3.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.3.0 to 3.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.3.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003cp\u003eThis release fixes a compatibility issue with Python 3.15:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMNT: do not use deprecated load_module method (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/pull/218\"\u003eredis/hiredis-py#218\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributors\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/tacaswell\"\u003e\u003ccode\u003e@​tacaswell\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/3cb8f069006f7138620b065fba973ccc490bde3d\"\u003e\u003ccode\u003e3cb8f06\u003c/code\u003e\u003c/a\u003e Version 3.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/2836c965d28606fecfc8989059edb36a0c4fb320\"\u003e\u003ccode\u003e2836c96\u003c/code\u003e\u003c/a\u003e MNT: do not use deprecated load_module method (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/218\"\u003e#218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.3.0...v3.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `importlib-metadata` from 8.7.1 to 9.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/importlib_metadata/blob/main/NEWS.rst\"\u003eimportlib-metadata's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev9.0.0\u003c/h1\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eMetadataNotFound\u003c/code\u003e (subclass of \u003ccode\u003eFileNotFoundError\u003c/code\u003e) and updated \u003ccode\u003eDistribution.metadata\u003c/code\u003e/\u003ccode\u003emetadata()\u003c/code\u003e to raise it when the metadata files are missing instead of returning \u003ccode\u003eNone\u003c/code\u003e\u003ccode\u003epython/cpython#143387\u003c/code\u003e\u003ca href=\"https://redirect.github.com/python/importlib_metadata/issues/532\"\u003e#532\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev8.9.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epython/cpython#110937\u003c/code\u003e\u003ca href=\"https://redirect.github.com/python/cpython/issues/140141\"\u003epython/cpython#140141\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/python/cpython/issues/143658\"\u003epython/cpython#143658\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev8.8.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved Python 3.9 compatibility.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/importlib_metadata/commit/a9f883fef337c667a81a987bc0cbc0dbb43b2bfe\"\u003e\u003ccode\u003ea9f883f\u003c/code\u003e\u003c/a\u003e Finalize\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/9b0dfdfe2e187dca6644007570189aadc6c97a34\"\u003e\u003ccode\u003e9b0dfdf\u003c/code\u003e\u003c/a\u003e Raise an exception when no metadata file is found (\u003ca href=\"https://redirect.github.com/python/importlib_metadata/issues/532\"\u003e#532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/0f2229ca84f20be2ceaaa4c62a276fa9b003f5bc\"\u003e\u003ccode\u003e0f2229c\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into feature/no-metadata-exception\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/2f4088e490a73ac7f39b86214d2da16d2eb1ff39\"\u003e\u003ccode\u003e2f4088e\u003c/code\u003e\u003c/a\u003e Remove news fragments about internal details.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/0ac27203f8044daf634c22f385838122a0707449\"\u003e\u003ccode\u003e0ac2720\u003c/code\u003e\u003c/a\u003e Add news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/a5c2154835facb4a9d0a6f5b3aac1f3d1ff86170\"\u003e\u003ccode\u003ea5c2154\u003c/code\u003e\u003c/a\u003e Finalize\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/e66e22634f7522e7778b66e8a8b19782a11d4943\"\u003e\u003ccode\u003ee66e226\u003c/code\u003e\u003c/a\u003e Drop support for EOL Python 3.9 (\u003ca href=\"https://redirect.github.com/python/importlib_metadata/issues/530\"\u003e#530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/6027933ae96c9e51dd0b7ce392cb30f6fcae1940\"\u003e\u003ccode\u003e6027933\u003c/code\u003e\u003c/a\u003e Add news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/b89388a53bf857127e0a6860dfcfe2cd69a79ab8\"\u003e\u003ccode\u003eb89388a\u003c/code\u003e\u003c/a\u003e Import os_helper directly.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/importlib_metadata/commit/2dcb761d940b0115b786ab3b6f336af7d94630f4\"\u003e\u003ccode\u003e2dcb761\u003c/code\u003e\u003c/a\u003e Add uniform exclusions for test.support.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/importlib_metadata/compare/v8.7.1...v9.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 7.2.0 to 7.4.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\u003e7.4.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix AttributeError in cluster metrics recording when connection is None or ClusterNode object instance is used to extract the connection info (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3999\"\u003e#3999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing security concern in \u003cstrong\u003erepr\u003c/strong\u003e methods for ConnectionPools - passwords might leak in plain text logs (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3998\"\u003e#3998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactored connection count and SCH metric collection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4001\"\u003e#4001\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧪 Experimental Features\u003c/h2\u003e\n\u003cp\u003e-Refactored health check logic for MultiDBClient (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3994\"\u003e#3994\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExpose basic Otel classes and functions to be importable through redis.observability to match the examples in the readthedocs (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3996\"\u003e#3996\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eOpenTelemetry Native Metrics Support for asynchronous clients\u003c/strong\u003e\nAdded comprehensive OpenTelemetry metrics support for asynchronous clients following the \u003ca href=\"https://opentelemetry.io/docs/specs/semconv/database/database-metrics/\"\u003eOpenTelemetry Database Client Semantic Conventions\u003c/a\u003e.\nMetric groups include:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCommand metrics: Operation duration with retry tracking\u003c/li\u003e\n\u003cli\u003eConnection basic: Connection count and creation time\u003c/li\u003e\n\u003cli\u003eResiliency: Errors, handoffs, timeout relaxation\u003c/li\u003e\n\u003cli\u003eConnection advanced: Wait time and use time\u003c/li\u003e\n\u003cli\u003ePubsub metrics: Published and received messages\u003c/li\u003e\n\u003cli\u003eStream metrics: Processing duration and maintenance notifications\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded OTel instrumentation and metrics export for async client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3977\"\u003e#3977\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[async] Adding access to cluster client's nodes_manager and set_response_callback in ClusterPipeline objects (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3989\"\u003e#3989\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(connection): Ensure we have an initialized protocol in connection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3981\"\u003e#3981\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: use KeysT for blpop and brpop keys parameter type annotation (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3987\"\u003e#3987\u003c/a\u003e \u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3990\"\u003e#3990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 6 to 7 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3985\"\u003e#3985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: replace 3 bare except clauses with except Exception (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3980\"\u003e#3980\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/turanalmammadov\"\u003e\u003ccode\u003e@​turanalmammadov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/haosenwang1018\"\u003e\u003ccode\u003e@​haosenwang1018\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/Medno\"\u003e\u003ccode\u003e@​Medno\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.2.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/b72f24ad6a2226d46aed770e18094a86117d2217\"\u003e\u003ccode\u003eb72f24a\u003c/code\u003e\u003c/a\u003e Updating lib version to 7.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/0a4e0afe36504c3fb6df1e38683ea946febac9d3\"\u003e\u003ccode\u003e0a4e0af\u003c/code\u003e\u003c/a\u003e Refactored health check logic for MultiDBClient (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3994\"\u003e#3994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/15492c9156d3ab8dce05360977480510cf24fbf9\"\u003e\u003ccode\u003e15492c9\u003c/code\u003e\u003c/a\u003e Refactored connection count and SCH metric collection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4001\"\u003e#4001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/cd964ac96649df872a051835e9a52e05a5090607\"\u003e\u003ccode\u003ecd964ac\u003c/code\u003e\u003c/a\u003e Expose basic Otel classes and funtions to be importable through redis.observa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/46ab74d02ed9b15176f67edb817de83524f8145a\"\u003e\u003ccode\u003e46ab74d\u003c/code\u003e\u003c/a\u003e Fixing security concern in \u003cstrong\u003erepr\u003c/strong\u003e methods for ConnectionPools - passwords m...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/26482dbaae38abdb1966d9b1c803331e2dab2053\"\u003e\u003ccode\u003e26482db\u003c/code\u003e\u003c/a\u003e Fix AttributeError in cluster metrics recording when connection is None or Cl...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/8ecbc7a728792ab9c71078cb330a64c225cb3351\"\u003e\u003ccode\u003e8ecbc7a\u003c/code\u003e\u003c/a\u003e Updating lib version to 7.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/11043df86ed5f892cde1f34f08f3450f13bb6339\"\u003e\u003ccode\u003e11043df\u003c/code\u003e\u003c/a\u003e typing: accept single-key input for blpop and brpop (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3990\"\u003e#3990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d9581250202123ebf68d299e8f2ea79fa9bd7210\"\u003e\u003ccode\u003ed958125\u003c/code\u003e\u003c/a\u003e fix: use KeysT for blpop and brpop keys parameter type annotation (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3987\"\u003e#3987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/75bf91b8a28bfc3f8417e58d1b78bd112ffcf6de\"\u003e\u003ccode\u003e75bf91b\u003c/code\u003e\u003c/a\u003e [async] Adding access to cluster client's nodes_manager and set_response_call...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v7.2.0...v7.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.32.5 to 2.33.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.33.1\u003c/h2\u003e\n\u003ch2\u003e2.33.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\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/ferdnyc\"\u003e\u003ccode\u003e@​ferdnyc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7277\"\u003epsf/requests#7277\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2331-2026-03-30\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2331-2026-03-30\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.33.0\u003c/h2\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that uses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report any gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts contents to a non-deterministic location to prevent malicious file replacement. This does not affect default usage of Requests, only applications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause malformed authentication to be applied to Requests on Python 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/M0d3v1\"\u003e\u003ccode\u003e@​M0d3v1\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6865\"\u003epsf/requests#6865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aminvakil\"\u003e\u003ccode\u003e@​aminvakil\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7220\"\u003epsf/requests#7220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/E8Price\"\u003e\u003ccode\u003e@​E8Price\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6960\"\u003epsf/requests#6960\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7244\"\u003epsf/requests#7244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/magsen\"\u003e\u003ccode\u003e@​magsen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6553\"\u003epsf/requests#6553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Rohan5commit\"\u003e\u003ccode\u003e@​Rohan5commit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7227\"\u003epsf/requests#7227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.33.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that\nuses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report\nany gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts\ncontents to a non-deterministic location to prevent malicious file\nreplacement. This does not affect default usage of Requests, only\napplications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause\nmalformed authentication to be applied to Requests on\nPython 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/111d2b77790bf49943c0dfa09b365371c24aec7e\"\u003e\u003ccode\u003e111d2b7\u003c/code\u003e\u003c/a\u003e v2.33.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/f0198e6dfc431a2293dc16e1b1e8fcddc910a7f3\"\u003e\u003ccode\u003ef0198e6\u003c/code\u003e\u003c/a\u003e Fix malformed value parsing for Content-Type (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc7dd0fc4d56e808bcdd85ac2d797b3107c89259\"\u003e\u003ccode\u003ebc7dd0f\u003c/code\u003e\u003c/a\u003e Fix cosmetic header validity parsing regex (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4443b1a847b190010c2972a658924b98b5db6360\"\u003e\u003ccode\u003e4443b1a\u003c/code\u003e\u003c/a\u003e Fix unintended test extra (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7306\"\u003e#7306\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/389eea58dfb2f2ee096421a812e3af29c0298951\"\u003e\u003ccode\u003e389eea5\u003c/code\u003e\u003c/a\u003e Cleanup extracted file after extract_zipped_path test (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7407309c8a8a73aa2f4337184025d440bbedab7a\"\u003e\u003ccode\u003e7407309\u003c/code\u003e\u003c/a\u003e Packaging: DRY out extras definition (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7277\"\u003e#7277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc04dfd6dad4cb02cd92f5daa81eb562d280a761\"\u003e\u003ccode\u003ebc04dfd\u003c/code\u003e\u003c/a\u003e v2.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/66d21cb07bd6255b1280291c4fafb71803cdb3b7\"\u003e\u003ccode\u003e66d21cb\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/8b9bc8fc0f63be84602387913c4b689f19efd028\"\u003e\u003ccode\u003e8b9bc8f\u003c/code\u003e\u003c/a\u003e Move badges to top of README (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7293\"\u003e#7293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e331a288f369973f5de0ec8901c94cae4fa87286\"\u003e\u003ccode\u003ee331a28\u003c/code\u003e\u003c/a\u003e Remove unused extraction call (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7292\"\u003e#7292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.33.1\"\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.53.0 to 2.58.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.58.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(ai) Redact base64 data URLs in image_url content blocks by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5953\"\u003e#5953\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(integrations) Instrument pyreqwest tracing by \u003ca href=\"https://github.com/servusdei2018\"\u003e\u003ccode\u003e@​servusdei2018\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5682\"\u003e#5682\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(litellm) Add async callbacks by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5969\"\u003e#5969\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eAnthropic\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCapture exceptions for \u003ccode\u003estream()\u003c/code\u003e calls by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5950\"\u003e#5950\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStop setting transaction status when child span fails by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5717\"\u003e#5717\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eOnly finish relevant spans in .create() patches by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5716\"\u003e#5716\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003ePydantic Ai\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdapt import for new library versions by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5984\"\u003e#5984\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse first-class hooks when available by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5947\"\u003e#5947\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(huggingface_hub) Stop setting transaction status when a child span fails by \u003ca href=\"https://github.com/Zenithatic\"\u003e\u003ccode\u003e@​Zenithatic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5952\"\u003e#5952\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(litellm) Avoid double span exits when streaming by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5933\"\u003e#5933\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(wsgi) Respect HTTP_X_FORWARDED_PROTO in request.url construction by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5963\"\u003e#5963\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003ch4\u003eLitellm\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in rate-limit test by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5975\"\u003e#5975\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in embedding tests by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5970\"\u003e#5970\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in nonstreaming \u003ccode\u003ecompletion()\u003c/code\u003e tests by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5937\"\u003e#5937\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove dead attributes by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5985\"\u003e#5985\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(ai) Remove \u003ccode\u003egen_ai.tool.type\u003c/code\u003e span attribute by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5964\"\u003e#5964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(anthropic) Separate sync and async .create() patches by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5715\"\u003e#5715\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai) Split token counting by API for easier deprecation by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5930\"\u003e#5930\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai-agents) Remove error attributes by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5986\"\u003e#5986\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(opentelemetry) Ignore mypy error by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5927\"\u003e#5927\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🤖 Update test matrix with new releases (04/13) by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5983\"\u003e#5983\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix license metadata in setup.py by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5934\"\u003e#5934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate validate-pr workflow by \u003ca href=\"https://github.com/stephanie-anderson\"\u003e\u003ccode\u003e@​stephanie-anderson\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5931\"\u003e#5931\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eNone\u003c/code\u003e span context in the span processor and pin tokenizers version for anthropic tests on Python 3.8 by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5967\"\u003e#5967\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- 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.58.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(ai) Redact base64 data URLs in image_url content blocks by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5953\"\u003e#5953\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(integrations) Instrument pyreqwest tracing by \u003ca href=\"https://github.com/servusdei2018\"\u003e\u003ccode\u003e@​servusdei2018\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5682\"\u003e#5682\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(litellm) Add async callbacks by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5969\"\u003e#5969\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eAnthropic\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCapture exceptions for \u003ccode\u003estream()\u003c/code\u003e calls by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5950\"\u003e#5950\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStop setting transaction status when child span fails by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5717\"\u003e#5717\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eOnly finish relevant spans in .create() patches by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5716\"\u003e#5716\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003ePydantic Ai\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdapt import for new library versions by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5984\"\u003e#5984\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse first-class hooks when available by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5947\"\u003e#5947\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(huggingface_hub) Stop setting transaction status when a child span fails by \u003ca href=\"https://github.com/Zenithatic\"\u003e\u003ccode\u003e@​Zenithatic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5952\"\u003e#5952\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(litellm) Avoid double span exits when streaming by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5933\"\u003e#5933\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(wsgi) Respect HTTP_X_FORWARDED_PROTO in request.url construction by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5963\"\u003e#5963\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003ch4\u003eLitellm\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in rate-limit test by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5975\"\u003e#5975\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in embedding tests by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5970\"\u003e#5970\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in nonstreaming \u003ccode\u003ecompletion()\u003c/code\u003e tests by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5937\"\u003e#5937\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove dead attributes by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5985\"\u003e#5985\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(ai) Remove \u003ccode\u003egen_ai.tool.type\u003c/code\u003e span attribute by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5964\"\u003e#5964\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(anthropic) Separate sync and async .create() patches by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5715\"\u003e#5715\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai) Split token counting by API for easier deprecation by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5930\"\u003e#5930\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai-agents) Remove error attributes by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5986\"\u003e#5986\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(opentelemetry) Ignore mypy error by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5927\"\u003e#5927\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🤖 Update test matrix with new releases (04/13) by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5983\"\u003e#5983\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix license metadata in setup.py by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5934\"\u003e#5934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate validate-pr workflow by \u003ca href=\"https://github.com/stephanie-anderson\"\u003e\u003ccode\u003e@​stephanie-anderson\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5931\"\u003e#5931\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eNone\u003c/code\u003e span context in the span processor and pin tokenizers version for anthropic tests on Python 3.8 by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/5967\"\u003e#5967\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/ce445d96977ec083b97495c917aa0c3ce453689d\"\u003e\u003ccode\u003ece445d9\u003c/code\u003e\u003c/a\u003e release: 2.58.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/c0c0e9cfc8536f0d9ba22925e4bea17034138cd0\"\u003e\u003ccode\u003ec0c0e9c\u003c/code\u003e\u003c/a\u003e feat(litellm): Add async callbacks (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/5969\"\u003e#5969\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/ea74b63881d2cf1d71130a8b6ef4dfff4e4cd337\"\u003e\u003ccode\u003eea74b63\u003c/code\u003e\u003c/a\u003e test(litellm): Replace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in rate-limit test (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/5975\"\u003e#5975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/06ed1bca2f9302055ba43dc058f5afcc731b8d79\"\u003e\u003ccode\u003e06ed1bc\u003c/code\u003e\u003c/a\u003e test(litellm): Replace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in embedding tests (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/5970\"\u003e#5970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/66ef2e6976a1ae86e97aca08cbc806f9e579f324\"\u003e\u003ccode\u003e66ef2e6\u003c/code\u003e\u003c/a\u003e test(litellm): Replace mocks with \u003ccode\u003ehttpx\u003c/code\u003e types in nonstreaming `completion()...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/96ebbf67d91146ebb30be6e0898a637ea6c2c697\"\u003e\u003ccode\u003e96ebbf6\u003c/code\u003e\u003c/a\u003e fix(litellm): Avoid double span exits when streaming (\u003ca...\n\n_Description has been truncated_","html_url":"https://github.com/mrs-soft/fission-environments/pull/26","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrs-soft%2Ffission-environments/issues/26","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/26/packages"}},{"old_version":"7.4.2","new_version":"7.4.3","update_type":"patch","path":null,"pr_created_at":"2026-04-20T04:53:34.000Z","version_change":"7.4.2 → 7.4.3","issue":{"uuid":"4293163826","node_id":"PR_kwDOAJbZm87T0bQs","number":5407,"state":"open","title":"chore(deps): bump chardet from 7.4.2 to 7.4.3","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-04-20T04:53:34.000Z","updated_at":"2026-04-20T05:17:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"chardet","old_version":"7.4.2","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":null,"ecosystem":"pip"},"body":"Bumps [chardet](https://github.com/chardet/chardet) from 7.4.2 to 7.4.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chardet\u0026package-manager=pip\u0026previous-version=7.4.2\u0026new-version=7.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/GeotrekCE/Geotrek-admin/pull/5407","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeotrekCE%2FGeotrek-admin/issues/5407","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5407/packages"}},{"old_version":"3.0.4","new_version":"7.4.3","update_type":"major","path":null,"pr_created_at":"2026-04-20T04:07:01.000Z","version_change":"3.0.4 → 7.4.3","issue":{"uuid":"4293023396","node_id":"PR_kwDOHnVgLs7Tz_kq","number":365,"state":"closed","title":"Bump chardet from 3.0.4 to 7.4.3","user":"dependabot[bot]","labels":["Stale"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-05-27T02:37:10.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-20T04:07:01.000Z","updated_at":"2026-05-27T02:37:19.000Z","time_to_close":3191409,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"chardet","old_version":"3.0.4","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":null,"ecosystem":"pip"},"body":"Bumps [chardet](https://github.com/chardet/chardet) from 3.0.4 to 7.4.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/3.0.4...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chardet\u0026package-manager=pip\u0026previous-version=3.0.4\u0026new-version=7.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/meanseo/pytorch/pull/365","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/meanseo%2Fpytorch/issues/365","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/365/packages"}},{"old_version":"3.0.4","new_version":"7.4.3","update_type":"major","path":null,"pr_created_at":"2026-04-20T02:31:37.000Z","version_change":"3.0.4 → 7.4.3","issue":{"uuid":"4292748320","node_id":"PR_kwDOGkj6vc7TzIGf","number":417,"state":"closed","title":"Bump chardet from 3.0.4 to 7.4.3","user":"dependabot[bot]","labels":["dependencies","python","status: stale"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-05-25T05:53:41.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-20T02:31:37.000Z","updated_at":"2026-05-25T05:53:51.000Z","time_to_close":3036124,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"chardet","old_version":"3.0.4","new_version":"7.4.3","repository_url":"https://github.com/chardet/chardet"}],"path":null,"ecosystem":"pip"},"body":"Bumps [chardet](https://github.com/chardet/chardet) from 3.0.4 to 7.4.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chardet/chardet/releases\"\u003echardet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash when input contains null bytes inside a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained a \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name (e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises \u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only catching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches in \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e, thanks \u003ca href=\"https://github.com/DRMacIver\"\u003e\u003ccode\u003e@​DRMacIver\u003c/code\u003e\u003c/a\u003e for the report)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.2...7.4.3\"\u003ehttps://github.com/chardet/chardet/compare/7.4.2...7.4.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.2\u003c/h2\u003e\n\u003cp\u003ePatch release: fixes a crash on short inputs and closes a bunch of WHATWG/IANA alias gaps.\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e on ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e). Multi-byte encodings like CP932 and Johab could score above the structural confidence threshold on very short inputs, but then statistical scoring would return nothing, leaving an empty result list instead of falling through to the fallback. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/367\"\u003e#367\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e, thanks \u003ca href=\"https://github.com/jasonwbarnett\"\u003e\u003ccode\u003e@​jasonwbarnett\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA Character Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like \u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the \u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection stage. Every alias was driven by a failing spec-compliance test, not speculative. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips for all 86 registry encodings, WHATWG label resolution, IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing, UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite that would have caught the 7.4.1 BOM bug before release. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.1...7.4.2\"\u003ehttps://github.com/chardet/chardet/compare/7.4.1...7.4.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.4.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBOM-prefixed UTF-16/32 input now returns \u003ccode\u003eutf-16\u003c/code\u003e/\u003ccode\u003eutf-32\u003c/code\u003e instead of \u003ccode\u003eutf-16-le\u003c/code\u003e/\u003ccode\u003eutf-16-be\u003c/code\u003e/\u003ccode\u003eutf-32-le\u003c/code\u003e/\u003ccode\u003eutf-32-be\u003c/code\u003e. The endian-specific codecs don't strip the BOM on decode, so callers were getting a stray U+FEFF at the start of their text. BOM-less detection is unchanged. (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/364\"\u003e#364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chardet/chardet/compare/7.4.0...7.4.1\"\u003ehttps://github.com/chardet/chardet/compare/7.4.0...7.4.1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003echardet 7.4.0 brings accuracy up to 99.3% (from 98.6% in 7.3.0) and significantly faster cold start thanks to a new dense model format.\u003c/p\u003e\n\u003ch2\u003eWhat's New\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNew dense zlib-compressed model format (v2) drops cold start (import + first detect) from ~75ms to ~13ms with mypyc\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAccuracy (98.6% → 99.3%):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEliminated train/test data overlap via content fingerprinting\u003c/li\u003e\n\u003cli\u003eAdded MADLAD-400 and Wikipedia as supplemental training sources\u003c/li\u003e\n\u003cli\u003eImproved non-ASCII bigram scoring: high-byte bigrams are now preserved during training and weighted by per-bigram IDF\u003c/li\u003e\n\u003cli\u003eEncoding-aware substitution filtering (substitutions only apply for characters the target encoding can't represent)\u003c/li\u003e\n\u003cli\u003eIncreased training samples from 15K to 25K per language/encoding pair\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded dedicated structural analyzers for CP932, CP949, and Big5-HKSCS (these were previously sharing their base encoding's byte-range analyzer, missing extended ranges)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMetrics\u003c/h2\u003e\n\u003cp\u003e|                        | chardet 7.4.0 (mypyc) | chardet 6.0.0 | charset-normalizer 3.4.6 |\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/chardet/chardet/blob/main/docs/changelog.rst\"\u003echardet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.4.3 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eValueError: embedded null character\u003c/code\u003e crash when input contained\na \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e declaration with a null byte in the encoding name\n(e.g. \u003ccode\u003eb'\u0026lt;meta charset=\u0026quot;\\x00utf-8\u0026quot;\u0026gt;'\u003c/code\u003e). \u003ccode\u003ecodecs.lookup()\u003c/code\u003e raises\n\u003ccode\u003eValueError\u003c/code\u003e on embedded nulls, and \u003ccode\u003elookup_encoding()\u003c/code\u003e was only\ncatching \u003ccode\u003eLookupError\u003c/code\u003e. Also added defensive \u003ccode\u003eValueError\u003c/code\u003e catches\nin \u003ccode\u003e_validate_bytes()\u003c/code\u003e and \u003ccode\u003e_to_utf8()\u003c/code\u003e for completeness.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#369](https://github.com/chardet/chardet/issues/369) \u0026lt;https://github.com/chardet/chardet/issues/369\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.2 (2026-04-12)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eRuntimeError: pipeline must always return at least one result\u003c/code\u003e\non ~2% of all possible two-byte inputs (e.g. \u003ccode\u003eb\u0026quot;\\xf9\\x92\u0026quot;\u003c/code\u003e).\nMulti-byte encodings like CP932 and Johab could score above the\nstructural confidence threshold on very short inputs, but then\nstatistical scoring would return nothing, leaving the pipeline with an\nempty result list instead of falling through to the \u003ccode\u003eno_match_encoding\u003c/code\u003e\nfallback.\n(\u003ccode\u003eJason Barnett \u0026lt;https://github.com/jasonwbarnett\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#367](https://github.com/chardet/chardet/issues/367) \u0026lt;https://github.com/chardet/chardet/issues/367\u0026gt;\u003c/code\u003e\u003cem\u003e,\n\u003ccode\u003e[#368](https://github.com/chardet/chardet/issues/368) \u0026lt;https://github.com/chardet/chardet/pull/368\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded ~90 encoding aliases from the WHATWG Encoding Standard and IANA\nCharacter Sets registry so that \u003ccode\u003e\u0026lt;meta charset\u0026gt;\u003c/code\u003e labels like\n\u003ccode\u003ex-cp1252\u003c/code\u003e, \u003ccode\u003ex-sjis\u003c/code\u003e, \u003ccode\u003edos-874\u003c/code\u003e, \u003ccode\u003ecsUTF8\u003c/code\u003e, and the\n\u003ccode\u003ecswindows*\u003c/code\u003e family all resolve correctly through the markup detection\nstage. Every alias was driven by a failing spec-compliance test.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eAdded a spec-compliance test suite covering Python decode round-trips\nfor all 86 registry encodings, WHATWG web-platform label resolution,\nIANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,\nUTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite\nthat would have caught the 7.4.1 BOM bug before release.\n(\u003ccode\u003eDan Blanchard \u0026lt;https://github.com/dan-blanchard\u0026gt;\u003c/code\u003e_ via Claude,\n\u003ccode\u003e[#366](https://github.com/chardet/chardet/issues/366) \u0026lt;https://github.com/chardet/chardet/pull/366\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.4.1 (2026-04-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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/8f404a5a93097439143c2d084663e44c033790fd\"\u003e\u003ccode\u003e8f404a5\u003c/code\u003e\u003c/a\u003e docs: set 7.4.3 release date to 2026-04-13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/7a6667f16ecece0184cd4ad915b03f63b2469a33\"\u003e\u003ccode\u003e7a6667f\u003c/code\u003e\u003c/a\u003e docs: fix changelog attribution for \u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/a1fc986cbd5fda9f65b09cc81237c963e8830cb2\"\u003e\u003ccode\u003ea1fc986\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/0af01d6d8ecf445db533a757633395abfd309444\"\u003e\u003ccode\u003e0af01d6\u003c/code\u003e\u003c/a\u003e Fix ValueError crash on null bytes in charset declarations (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/08e4ebc71163260d45f67446a6fcb5db043b0ba6\"\u003e\u003ccode\u003e08e4ebc\u003c/code\u003e\u003c/a\u003e ci: parallelize riscv64 builds across 5 RISE runners\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/2f6e1e9c522c975fe03f9d65acb5b05867d3f0fd\"\u003e\u003ccode\u003e2f6e1e9\u003c/code\u003e\u003c/a\u003e ci: use python3 -m pip on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/204623d682751a1a7f48cb1869fd0eafdde28486\"\u003e\u003ccode\u003e204623d\u003c/code\u003e\u003c/a\u003e ci: invoke cibuildwheel manually on riscv64 runner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/78c1d20995571cba7a60badbadae2fa64272b99a\"\u003e\u003ccode\u003e78c1d20\u003c/code\u003e\u003c/a\u003e ci: use native runners for aarch64/riscv64 instead of QEMU\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/3cc09600d5245b5a37942aef959d134689c981e8\"\u003e\u003ccode\u003e3cc0960\u003c/code\u003e\u003c/a\u003e docs: changelog for 7.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chardet/chardet/commit/9079efce6a692bcb8b4392fcd0be747f8b1909be\"\u003e\u003ccode\u003e9079efc\u003c/code\u003e\u003c/a\u003e Fix RuntimeError on ~2% of two-byte inputs (\u003ca href=\"https://redirect.github.com/chardet/chardet/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/chardet/chardet/compare/3.0.4...7.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chardet\u0026package-manager=pip\u0026previous-version=3.0.4\u0026new-version=7.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/UnstoppableAwesomeness/NBC-Bot/pull/417","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/UnstoppableAwesomeness%2FNBC-Bot/issues/417","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/417/packages"}}]}