{"id":11586,"name":"python-json-logger","ecosystem":"pip","repository_url":"https://github.com/nhairs/python-json-logger","issues_count":365,"created_at":"2025-06-06T23:05:08.765Z","updated_at":"2025-06-06T23:05:08.765Z","purl":"pkg:pypi/python-json-logger","metadata":{"id":2888017,"name":"python-json-logger","ecosystem":"pypi","description":"JSON Log Formatter for the Python Logging Package","homepage":"https://nhairs.github.io/python-json-logger","licenses":"BSD-2-Clause License","normalized_licenses":["BSD-1-Clause"],"repository_url":"https://github.com/nhairs/python-json-logger","keywords_array":[],"namespace":null,"versions_count":35,"first_release_published_at":"2013-02-25T09:21:27.000Z","latest_release_published_at":"2025-03-07T07:08:25.000Z","latest_release_number":"3.3.0","last_synced_at":"2025-06-06T13:01:43.699Z","created_at":"2022-04-10T12:21:05.181Z","updated_at":"2025-06-06T13:01:43.700Z","registry_url":"https://pypi.org/project/python-json-logger/","install_command":"pip install python-json-logger --index-url https://pypi.org/simple","documentation_url":"https://python-json-logger.readthedocs.io/","metadata":{"funding":null,"documentation":null,"classifiers":["Development Status :: 6 - Mature","Intended Audience :: Developers","License :: OSI Approved :: BSD License","Operating System :: OS Independent","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.8","Programming Language :: Python :: 3.9","Topic :: System :: Logging","Typing :: Typed"],"normalized_name":"python-json-logger"},"repo_metadata":{"id":226540232,"uuid":"768968265","full_name":"nhairs/python-json-logger","owner":"nhairs","description":"JSON Formatter for Python Logging","archived":false,"fork":false,"pushed_at":"2025-05-26T09:51:32.000Z","size":1070,"stargazers_count":126,"open_issues_count":18,"forks_count":8,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-05-31T07:05:12.134Z","etag":null,"topics":["python","python-logging"],"latest_commit_sha":null,"homepage":"https://nhairs.github.io/python-json-logger/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nhairs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-03-08T04:17:48.000Z","updated_at":"2025-05-28T14:45:59.000Z","dependencies_parsed_at":"2024-03-11T15:40:49.992Z","dependency_job_id":"3545f4c8-047c-429d-bd04-8279da304ebf","html_url":"https://github.com/nhairs/python-json-logger","commit_stats":null,"previous_names":["nhairs/python-json-logger"],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nhairs","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":257438574,"owners_count":22546330,"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":"nhairs","name":null,"uuid":"9976336","kind":"user","description":"Security person working in Australian technology companies. Passionate about security and building software.","email":"","website":"https://www.nicholashairs.com","location":"Australia","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/9976336?u=580a6ce24c79b6ee64649705ca8044e0537289ea\u0026v=4","repositories_count":3,"last_synced_at":"2023-05-10T10:42:19.660Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/nhairs","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2023-05-10T10:42:19.681Z","updated_at":"2023-05-10T10:42:19.681Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nhairs","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nhairs/repositories"},"tags":[{"name":"v4.0.0.dev0","sha":"1f0cbd05cf3fe57ce0a022373f1b78c7f8e7d93f","kind":"commit","published_at":"2025-04-27T01:44:18.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v4.0.0.dev0","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v4.0.0.dev0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v4.0.0.dev0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v4.0.0.dev0/manifests"},{"name":"v3.3.0","sha":"9e6cb679dfb56cb82d9a8cc91f956efd72427055","kind":"commit","published_at":"2025-03-07T07:07:18.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v3.3.0","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v3.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.3.0/manifests"},{"name":"v3.2.1","sha":"e7761e56edb980cfab0165e32469d5fd017a5d72","kind":"commit","published_at":"2024-12-16T06:46:46.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v3.2.1","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v3.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.2.1/manifests"},{"name":"v3.2.0","sha":"c6c804171381b7500823a8f151101a56f80853a8","kind":"commit","published_at":"2024-12-10T23:57:12.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v3.2.0","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v3.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.2.0/manifests"},{"name":"v3.1.0","sha":"e2b40e420f4181fd921b01a2fd0b23ca82b5fc9b","kind":"commit","published_at":"2024-05-28T08:49:14.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v3.1.0","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v3.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.1.0/manifests"},{"name":"v3.1.0.rc3","sha":"1160ae8e9d59b53ef213c546f9702dd7d7bc0a7b","kind":"commit","published_at":"2024-05-18T06:26:49.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v3.1.0.rc3","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v3.1.0.rc3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.1.0.rc3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.1.0.rc3/manifests"},{"name":"v3.1.0.rc2","sha":"b37c54b3cfbe364b61485d82a2b5c450a4e77a62","kind":"commit","published_at":"2024-05-14T09:36:20.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v3.1.0.rc2","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v3.1.0.rc2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.1.0.rc2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.1.0.rc2/manifests"},{"name":"v3.1.0.rc1","sha":"49f69fbf65c85d01b858f3c7931de04d8851c815","kind":"commit","published_at":"2024-05-05T05:59:05.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v3.1.0.rc1","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v3.1.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.1.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.1.0.rc1/manifests"},{"name":"v3.0.1","sha":"2d2935e6f48a0af5b7719b4ae1c35dd4fa6bee91","kind":"commit","published_at":"2024-04-01T11:22:14.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v3.0.1","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v3.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.0.1/manifests"},{"name":"v3.0.0","sha":"7c5a3e6f7489d23eb0f016c5c12a2ff27c1dc192","kind":"commit","published_at":"2024-03-24T09:14:00.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v3.0.0","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v3.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v3.0.0/manifests"},{"name":"fork-point","sha":"5f85723f4693c7289724fdcda84cfc0b62da74d4","kind":"commit","published_at":"2023-02-28T17:40:55.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/fork-point","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/fork-point","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/fork-point","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/fork-point/manifests"},{"name":"v2.0.7","sha":"213ce50c2f3b6f516bbdaba196b1b18fcc5ee81b","kind":"commit","published_at":"2023-02-21T17:38:56.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v2.0.7","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v2.0.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.7/manifests"},{"name":"v2.0.6","sha":"08d41b36b7679a9f64c836265212bda485d00f06","kind":"commit","published_at":"2023-02-14T15:52:39.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v2.0.6","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v2.0.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.6/manifests"},{"name":"v2.0.5","sha":"5b7692b358f9828a16fc97665287f39118a4c9d3","kind":"commit","published_at":"2023-02-12T19:09:07.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v2.0.5","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v2.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.5/manifests"},{"name":"v2.0.4","sha":"b1a143c3cd92dbd58730945ac8103ee7c980e574","kind":"tag","published_at":"2022-07-11T14:00:01.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v2.0.4","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v2.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.4/manifests"},{"name":"v2.0.3","sha":"5fb15d594c83b58fce122b707f6f7a452c04aaf7","kind":"tag","published_at":"2022-07-08T23:39:40.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v2.0.3","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v2.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.3/manifests"},{"name":"v2.0.2","sha":"076b407aa7f34bc64a729cc77da336fb159d7597","kind":"commit","published_at":"2021-07-27T23:03:58.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v2.0.2","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v2.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.2/manifests"},{"name":"v2.0.1","sha":"e2287881d01e276744dfd85d74944c72954d38aa","kind":"commit","published_at":"2020-10-12T16:12:03.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v2.0.1","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v2.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.1/manifests"},{"name":"v2.0.0","sha":"feeda9c4c602712a39c78aa05c70d34b14d48552","kind":"commit","published_at":"2020-09-26T22:50:41.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v2.0.0","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v2.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v2.0.0/manifests"},{"name":"v0.1.11","sha":"687cc52260876fd2189cbb7c5856e3fbaff65279","kind":"tag","published_at":"2019-09-12T04:56:26.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v0.1.11","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v0.1.11","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.11","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.11/manifests"},{"name":"v0.1.10","sha":"12ab1c30c24846cadfba214fa9cd2c00d899ab2a","kind":"commit","published_at":"2018-11-07T13:32:04.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v0.1.10","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v0.1.10","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.10/manifests"},{"name":"v0.1.9","sha":"418788d181e06f7e2838e50020cb2cd531b16e3f","kind":"commit","published_at":"2018-05-01T14:43:05.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v0.1.9","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v0.1.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.9/manifests"},{"name":"v0.1.8","sha":"facdb3faa0bcd348d1dbf443ac1e852cb6828c0f","kind":"commit","published_at":"2017-08-13T15:49:11.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v0.1.8","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v0.1.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.8/manifests"},{"name":"v0.1.7","sha":"1a464798a033d3f8034c05811dbdf097ec4b0201","kind":"commit","published_at":"2017-03-12T19:48:23.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v0.1.7","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v0.1.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.7/manifests"},{"name":"v0.1.6","sha":"b36cfa42e8dc9866c0d78a2d5f4e62ff233b1420","kind":"commit","published_at":"2017-02-25T20:17:14.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v0.1.6","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v0.1.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.6/manifests"},{"name":"v0.1.5","sha":"6425c16b9e0de05e9f886861151230d502f8c68a","kind":"commit","published_at":"2016-06-12T15:13:45.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v0.1.5","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v0.1.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.5/manifests"},{"name":"v0.1.3","sha":"948353f4bdeec41b5bf00c845c8eb04ff334e8ca","kind":"tag","published_at":"2015-07-05T21:33:49.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v0.1.3","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v0.1.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.3/manifests"},{"name":"v0.1.2","sha":"09c33ef23d6cf49bc323970c3be416eafb82e9ed","kind":"tag","published_at":"2015-03-21T23:50:32.000Z","download_url":"https://codeload.github.com/nhairs/python-json-logger/tar.gz/v0.1.2","html_url":"https://github.com/nhairs/python-json-logger/releases/tag/v0.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhairs%2Fpython-json-logger/tags/v0.1.2/manifests"}]},"repo_metadata_updated_at":"2025-06-01T11:05:03.587Z","dependent_packages_count":282,"downloads":50302345,"downloads_period":"last-month","dependent_repos_count":10960,"rankings":{"downloads":0.04438681088100483,"dependent_repos_count":0.08143695880647167,"dependent_packages_count":0.08418820741479842,"stargazers_count":2.3277397392183152,"forks_count":4.2451766026481685,"docker_downloads_count":0.045670726898223976,"average":1.1380998409778305},"purl":"pkg:pypi/python-json-logger","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/python-json-logger","docker_dependents_count":2856,"docker_downloads_count":1762005116,"usage_url":"https://repos.ecosyste.ms/usage/pypi/python-json-logger","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/python-json-logger/dependencies","status":null,"funding_links":[],"critical":true,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/python-json-logger/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/python-json-logger/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/python-json-logger/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/python-json-logger/related_packages","maintainers":[{"uuid":"nhairs","login":"nhairs","name":null,"email":null,"url":null,"packages_count":8,"html_url":"https://pypi.org/user/nhairs/","role":null,"created_at":"2024-12-11T04:28:02.459Z","updated_at":"2024-12-11T04:28:02.459Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/nhairs/packages"},{"uuid":"peritus","login":"peritus","name":null,"email":null,"url":null,"packages_count":11,"html_url":"https://pypi.org/user/peritus/","role":null,"created_at":"2023-01-08T07:27:57.109Z","updated_at":"2023-01-08T07:27:57.109Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/peritus/packages"},{"uuid":"madzak","login":"madzak","name":null,"email":null,"url":null,"packages_count":2,"html_url":"https://pypi.org/user/madzak/","role":null,"created_at":"2023-01-08T07:27:57.105Z","updated_at":"2023-01-08T07:27:57.105Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/madzak/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":208,"unique_repositories_count_past_30_days":11,"recent_issues":[{"uuid":"4604835468","node_id":"PR_kwDORESnns7jgKqu","number":511,"state":"closed","title":"build(deps): update python-json-logger requirement from \u003e=2.0.7 to \u003e=4.0.0","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":9,"pull_request":true,"closed_at":"2026-06-06T20:30:28.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-06T19:21:55.000Z","updated_at":"2026-06-07T21:24:32.000Z","time_to_close":4113,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): update","packages":[{"name":"python-json-logger","old_version":"\u003e=2.0.7","new_version":"\u003e=4.0.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":null,"ecosystem":"pip"},"body":"\u003e [!WARNING]\n\u003e Dependabot will stop supporting `python v3.9`!\n\u003e \n\u003e Please upgrade to one of the following versions: `v3.9`, `v3.10`, `v3.11`, `v3.12`, `v3.13`, or `v3.14`.\n\u003e\n\nUpdates the requirements on [python-json-logger](https://github.com/nhairs/python-json-logger) 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/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.0...v3.2.1\"\u003e3.2.1\u003c/a\u003e - 2024-12-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImport error on \u003ccode\u003eimport pythonjsonlogger.jsonlogger\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/29\"\u003e#29\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.1.0...v3.2.0\"\u003e3.2.0\u003c/a\u003e - 2024-12-11\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epythonjsonlogger.[ORJSON,MSGSPEC]_AVAILABLE\u003c/code\u003e no longer imports the respective package when determining availability.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003epythonjsonlogger.[orjson,msgspec]\u003c/code\u003e now throws a \u003ccode\u003epythonjsonlogger.exception.MissingPackageError\u003c/code\u003e when required libraries are not available. These contain more information about what is missing whilst still being an \u003ccode\u003eImportError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edefaults\u003c/code\u003e parameter is no longer ignored and now conforms to the standard library. Setting a defaults dictionary will add the specified keys if the those keys do not exist in a record or weren't passed by the \u003ccode\u003eextra\u003c/code\u003e parameter when logging a message.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etyping_extensions\u003c/code\u003e is only installed on Python version \u0026lt; 3.10.\u003c/li\u003e\n\u003cli\u003eSupport Python 3.13\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/defed00ecccfdf60a3ca37b01c71d07ce1780b4f\"\u003e\u003ccode\u003edefed00\u003c/code\u003e\u003c/a\u003e Release 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/c10f1c219f3ad7ef84381c818313c0b0eb4d52a3\"\u003e\u003ccode\u003ec10f1c2\u003c/code\u003e\u003c/a\u003e [docs] Fix changelog formatting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/ce8268cc1c417c717f68081c68c2eec65bd87454\"\u003e\u003ccode\u003ece8268c\u003c/code\u003e\u003c/a\u003e Release version 4.0.0.rc1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/a8eca471900aaf520f004d89c32db68dd9d8c16f\"\u003e\u003ccode\u003ea8eca47\u003c/code\u003e\u003c/a\u003e [core] Support sequence of strings for Formatter fmt (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/55\"\u003e#55\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b53b9303fa5fa7d43d3b3cff4c5937fcbb012ef4\"\u003e\u003ccode\u003eb53b930\u003c/code\u003e\u003c/a\u003e [core] Add support for comma format (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/54\"\u003e#54\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0428e2b2e06013ac0c2213411815194a2b9338aa\"\u003e\u003ccode\u003e0428e2b\u003c/code\u003e\u003c/a\u003e [core] Rename LogRecord/log_record to LogData/log_data  (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/53\"\u003e#53\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/ac108d9eb09942a9914f17f45b61bad95d697de8\"\u003e\u003ccode\u003eac108d9\u003c/code\u003e\u003c/a\u003e [core,json,orjson,msgspec] Remove use of str_to_object (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/52\"\u003e#52\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0843f5294373153864694a8299e5a8cc639bba42\"\u003e\u003ccode\u003e0843f52\u003c/code\u003e\u003c/a\u003e [docs] Update version added for exc_info_as_array, stack_info_as_array (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/60\"\u003e#60\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/f36b8b59590b098e7e1a0998931e1576412722c6\"\u003e\u003ccode\u003ef36b8b5\u003c/code\u003e\u003c/a\u003e [docs] Add style guide (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/58\"\u003e#58\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/03ad4d1b15c2355e559e73e30bc37ccf5cd776ca\"\u003e\u003ccode\u003e03ad4d1\u003c/code\u003e\u003c/a\u003e [docs] Update documentation (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/57\"\u003e#57\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v2.0.7...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n","html_url":"https://github.com/SHAdd0WTAka/Zen-Ai-Pentest/pull/511","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/SHAdd0WTAka%2FZen-Ai-Pentest/issues/511","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/511/packages"},{"uuid":"4567378429","node_id":"PR_kwDOQIiWRs7hlHZO","number":277,"state":"closed","title":"build(deps): bump the pip-production-dependencies group across 3 directories with 18 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-03T23:07:03.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-02T00:37:40.000Z","updated_at":"2026-06-03T23:07:05.000Z","time_to_close":167363,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"pip-production-dependencies","update_count":18,"packages":[{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.2.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.38.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.38.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.38.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"grpcio-health-checking","old_version":"1.71.0","new_version":"1.81.0"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-dotenv","old_version":"1.1.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 18 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.81.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n\nBumps the pip-production-dependencies group with 13 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 8 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.81.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.2...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.2.0 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-hooks-opentelemetry` from 0.2.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emigrate to uv (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/293\"\u003e#293\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/9590554be4c8a7f77b0c0f20d6b48076c9870f52\"\u003e9590554\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a2ec682a709a4721f8362cfa6a9e6037937761ee\"\u003ea2ec682\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.38.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.38.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.38.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.38.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-jinja2` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-jinja2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eNo significant changes.\u003c/p\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: update auto-instrumentation to re-inject\ninstrumentation path after init\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4469\"\u003e#4469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e: Add Database client operation duration\nand returned rows metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4481\"\u003e#4481\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments\nand add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Use \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e to\nformat and extract each log record's body text to more closely match the\nexpected usage of the logging system. As a result, all OTel log record bodies\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-requests` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-requests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eNo significant changes.\u003c/p\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: update auto-instrumentation to re-inject\ninstrumentation path after init\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4469\"\u003e#4469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e: Add Database client operation duration\nand returned rows metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4481\"\u003e#4481\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments\nand add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Use \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e to\nformat and extract each log record's body text to more closely match the\nexpected usage of the logging system. As a result, all OTel log record bodies\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-system-metrics` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-system-metrics's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eNo significant changes.\u003c/p\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: update auto-instrumentation to re-inject\ninstrumentation path after init\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4469\"\u003e#4469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e: Add Database client operation duration\nand returned rows metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4481\"\u003e#4481\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments\nand add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Use \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e to\nformat and extract each log record's body text to more closely match the\nexpected usage of the logging system. As a result, all OTel log record bodies\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-urllib3` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-urllib3's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eNo significant changes.\u003c/p\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: update auto-instrumentation to re-inject\ninstrumentation path after init\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4469\"\u003e#4469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e: Add Database client operation duration\nand returned rows metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4481\"\u003e#4481\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments\nand add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Use \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e to\nformat and extract each log record's body text to more closely match the\nexpected usage of the logging system. As a result, all OTel log record bodies\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-sdk` from 1.38.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.38.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-semantic-conventions` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-semantic-conventions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-logging` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-logging's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eNo significant changes.\u003c/p\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: update auto-instrumentation to re-inject\ninstrumentation path after init\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4469\"\u003e#4469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e: Add Database client operation duration\nand returned rows metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4481\"\u003e#4481\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments\nand add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Use \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e to\nformat and extract each log record's body text to more closely match the\nexpected usage of the logging system. As a result, all OTel log record bodies\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio-health-checking` from 1.71.0 to 1.81.0\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-...\n\n_Description has been truncated_","html_url":"https://github.com/monoscope-tech/oteldemo/pull/277","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/monoscope-tech%2Foteldemo/issues/277","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/277/packages"},{"uuid":"4503602899","node_id":"PR_kwDOQGVLVM7eZMqK","number":279,"state":"closed","title":"build(deps): bump the pip-production-dependencies group across 3 directories with 18 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-02T20:35:22.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-22T15:00:48.000Z","updated_at":"2026-06-02T20:35:24.000Z","time_to_close":970474,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"pip-production-dependencies","update_count":18,"packages":[{"name":"grpcio-health-checking","old_version":"1.71.0","new_version":"1.80.0"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.2.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.37.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-dotenv","old_version":"1.1.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.37.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.37.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 18 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 13 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 8 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n\n\nUpdates `grpcio-health-checking` from 1.71.0 to 1.80.0\n\nUpdates `openfeature-hooks-opentelemetry` from 0.2.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emigrate to uv (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/293\"\u003e#293\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/9590554be4c8a7f77b0c0f20d6b48076c9870f52\"\u003e9590554\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a2ec682a709a4721f8362cfa6a9e6037937761ee\"\u003ea2ec682\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.4.0...openfeature-provider-flagd/v0.4.1\"\u003e0.4.1\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evarious custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003ec119a77\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eflagd:\u003c/strong\u003e extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e1995534\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.3.0...openfeature-provider-flagd/v0.4.0\"\u003e0.4.0\u003c/a\u003e (2026-04-01)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/83c3e48595c0f44b4a3259719a5d85fde987f492\"\u003e83c3e48\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eintroduce list for fatal status codes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/362\"\u003e#362\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/96a88ada622fb7941a1d4d58205ff3342180fa9a\"\u003e96a88ad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.7...openfeature-provider-flagd/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-03-11)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.2.7\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/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/564eb68aa513e6d8b5fb06aa5f632f427b11abe5\"\u003e\u003ccode\u003e564eb68\u003c/code\u003e\u003c/a\u003e fix(security): update dependency pytest to v9.0.3 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.3...openfeature-provider-flagd/v0.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.58b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-distro's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.37.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.37.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.0.0 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.0.0...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.1.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cpackham-atlnz\"\u003e\u003ccode\u003e@​cpackham-atlnz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/597\"\u003etheskumar/python-dotenv#597\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.2.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\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/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.1] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMove more config to \u003ccode\u003epyproject.toml\u003c/code\u003e, removed \u003ccode\u003esetup.cfg\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for reading \u003ccode\u003e.env\u003c/code\u003e from FIFOs (Unix) by [\u003ca href=\"https://github.com/sidharth-sudhir\"\u003e\u003ccode\u003e@​sidharth-sudhir\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/586\"\u003e#586\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.0] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade build system to use PEP 517 \u0026amp; PEP 518 to use \u003ccode\u003ebuild\u003c/code\u003e and \u003ccode\u003epyproject.toml\u003c/code\u003e by [\u003ca href=\"https://github.com/EpicWink\"\u003e\u003ccode\u003e@​EpicWink\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/583\"\u003e#583\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 by [\u003ca href=\"https://github.com/23f3001135\"\u003e\u003ccode\u003e@​23f3001135\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/579\"\u003e#579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for disabling of \u003ccode\u003eload_dotenv()\u003c/code\u003e using \u003ccode\u003ePYTHON_DOTENV_DISABLED\u003c/code\u003e env var. by [\u003ca href=\"https://github.com/matthewfranglen\"\u003e\u003ccode\u003e@​matthewfranglen\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/569\"\u003e#569\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/36004e0e34be7665ff2b11a8a4005144f76f176d\"\u003e\u003ccode\u003e36004e0\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.1 → 1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/eb202520e5933c9daf42501e1e42fdb0144002c8\"\u003e\u003ccode\u003eeb20252\u003c/code\u003e\u003c/a\u003e docs: update changelog for v1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e\u003ccode\u003e790c5c0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/43340da220fb4ca4f95357bbe21a3c7f8f1278b1\"\u003e\u003ccode\u003e43340da\u003c/code\u003e\u003c/a\u003e Remove the use of \u003ccode\u003esh\u003c/code\u003e in tests (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/09d7cee32459e7abdcb5c9d8122a552589c06a9c\"\u003e\u003ccode\u003e09d7cee\u003c/code\u003e\u003c/a\u003e docs: clarify override behavior and document FIFO support (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/c8de2887c00198c22842c5ae5e92d1747467363c\"\u003e\u003ccode\u003ec8de288\u003c/code\u003e\u003c/a\u003e ci: improve workflow efficiency with best practices (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/609\"\u003e#609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/7bd9e3dbfedc0983ad7d56d5570013035242bdf4\"\u003e\u003ccode\u003e7bd9e3d\u003c/code\u003e\u003c/a\u003e Add Windows testing to CI (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/1baaf04f336072e0ee324d5df9563ec767f14f81\"\u003e\u003ccode\u003e1baaf04\u003c/code\u003e\u003c/a\u003e Drop Python 3.9 support and update to PyPy 3.11 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a22cf8993804aeede0c20b75bb1a29d3a99e9dc\"\u003e\u003ccode\u003e4a22cf8\u003c/code\u003e\u003c/a\u003e ci: enable testing on Python 3.14t (free-threaded) (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e2e8e776b42e382ae38b44d3982dd649e7507dd4\"\u003e\u003ccode\u003ee2e8e77\u003c/code\u003e\u003c/a\u003e Fix license specifier (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.1.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.2...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.2.0 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.37.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.37.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-jinja2` from 0.58b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-jinja2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-requests` from 0.58b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-requests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/...\n\n_Description has been truncated_","html_url":"https://github.com/BramVerkuijlen/Minimal-OTel-Demo/pull/279","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/BramVerkuijlen%2FMinimal-OTel-Demo/issues/279","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/279/packages"},{"uuid":"4502049716","node_id":"PR_kwDOR9Fu287eUGgT","number":28,"state":"open","title":"Update python-json-logger requirement from \u003e=2.0.7 to \u003e=4.1.0 in /backend","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-22T10:55:49.000Z","updated_at":"2026-05-22T10:55:50.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"python-json-logger","old_version":"\u003e=2.0.7","new_version":"\u003e=4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":"/backend","ecosystem":"pip"},"body":"Updates the requirements on [python-json-logger](https://github.com/nhairs/python-json-logger) 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/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.0...v3.2.1\"\u003e3.2.1\u003c/a\u003e - 2024-12-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImport error on \u003ccode\u003eimport pythonjsonlogger.jsonlogger\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/29\"\u003e#29\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/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v2.0.7...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore 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/Akanaifu/TFE-Cycling/pull/28","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Akanaifu%2FTFE-Cycling/issues/28","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/28/packages"},{"uuid":"4500961536","node_id":"PR_kwDOQIiWRs7eQkAC","number":267,"state":"closed","title":"build(deps): bump the pip-production-dependencies group across 3 directories with 18 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-02T00:37:44.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-22T07:59:43.000Z","updated_at":"2026-06-02T00:37:46.000Z","time_to_close":923881,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"pip-production-dependencies","update_count":18,"packages":[{"name":"grpcio-health-checking","old_version":"1.71.0","new_version":"1.80.0"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.2.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.38.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-dotenv","old_version":"1.1.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.38.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.38.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 18 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 13 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 8 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n\n\nUpdates `grpcio-health-checking` from 1.71.0 to 1.80.0\n\nUpdates `openfeature-hooks-opentelemetry` from 0.2.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emigrate to uv (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/293\"\u003e#293\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/9590554be4c8a7f77b0c0f20d6b48076c9870f52\"\u003e9590554\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a2ec682a709a4721f8362cfa6a9e6037937761ee\"\u003ea2ec682\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.4.0...openfeature-provider-flagd/v0.4.1\"\u003e0.4.1\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evarious custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003ec119a77\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eflagd:\u003c/strong\u003e extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e1995534\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.3.0...openfeature-provider-flagd/v0.4.0\"\u003e0.4.0\u003c/a\u003e (2026-04-01)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/83c3e48595c0f44b4a3259719a5d85fde987f492\"\u003e83c3e48\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eintroduce list for fatal status codes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/362\"\u003e#362\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/96a88ada622fb7941a1d4d58205ff3342180fa9a\"\u003e96a88ad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.7...openfeature-provider-flagd/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-03-11)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.2.7\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/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/564eb68aa513e6d8b5fb06aa5f632f427b11abe5\"\u003e\u003ccode\u003e564eb68\u003c/code\u003e\u003c/a\u003e fix(security): update dependency pytest to v9.0.3 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.3...openfeature-provider-flagd/v0.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-distro's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.38.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.38.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.0.0 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.0.0...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.1.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cpackham-atlnz\"\u003e\u003ccode\u003e@​cpackham-atlnz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/597\"\u003etheskumar/python-dotenv#597\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.2.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\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/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.1] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMove more config to \u003ccode\u003epyproject.toml\u003c/code\u003e, removed \u003ccode\u003esetup.cfg\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for reading \u003ccode\u003e.env\u003c/code\u003e from FIFOs (Unix) by [\u003ca href=\"https://github.com/sidharth-sudhir\"\u003e\u003ccode\u003e@​sidharth-sudhir\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/586\"\u003e#586\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.0] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade build system to use PEP 517 \u0026amp; PEP 518 to use \u003ccode\u003ebuild\u003c/code\u003e and \u003ccode\u003epyproject.toml\u003c/code\u003e by [\u003ca href=\"https://github.com/EpicWink\"\u003e\u003ccode\u003e@​EpicWink\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/583\"\u003e#583\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 by [\u003ca href=\"https://github.com/23f3001135\"\u003e\u003ccode\u003e@​23f3001135\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/579\"\u003e#579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for disabling of \u003ccode\u003eload_dotenv()\u003c/code\u003e using \u003ccode\u003ePYTHON_DOTENV_DISABLED\u003c/code\u003e env var. by [\u003ca href=\"https://github.com/matthewfranglen\"\u003e\u003ccode\u003e@​matthewfranglen\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/569\"\u003e#569\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/36004e0e34be7665ff2b11a8a4005144f76f176d\"\u003e\u003ccode\u003e36004e0\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.1 → 1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/eb202520e5933c9daf42501e1e42fdb0144002c8\"\u003e\u003ccode\u003eeb20252\u003c/code\u003e\u003c/a\u003e docs: update changelog for v1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e\u003ccode\u003e790c5c0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/43340da220fb4ca4f95357bbe21a3c7f8f1278b1\"\u003e\u003ccode\u003e43340da\u003c/code\u003e\u003c/a\u003e Remove the use of \u003ccode\u003esh\u003c/code\u003e in tests (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/09d7cee32459e7abdcb5c9d8122a552589c06a9c\"\u003e\u003ccode\u003e09d7cee\u003c/code\u003e\u003c/a\u003e docs: clarify override behavior and document FIFO support (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/c8de2887c00198c22842c5ae5e92d1747467363c\"\u003e\u003ccode\u003ec8de288\u003c/code\u003e\u003c/a\u003e ci: improve workflow efficiency with best practices (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/609\"\u003e#609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/7bd9e3dbfedc0983ad7d56d5570013035242bdf4\"\u003e\u003ccode\u003e7bd9e3d\u003c/code\u003e\u003c/a\u003e Add Windows testing to CI (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/1baaf04f336072e0ee324d5df9563ec767f14f81\"\u003e\u003ccode\u003e1baaf04\u003c/code\u003e\u003c/a\u003e Drop Python 3.9 support and update to PyPy 3.11 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a22cf8993804aeede0c20b75bb1a29d3a99e9dc\"\u003e\u003ccode\u003e4a22cf8\u003c/code\u003e\u003c/a\u003e ci: enable testing on Python 3.14t (free-threaded) (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e2e8e776b42e382ae38b44d3982dd649e7507dd4\"\u003e\u003ccode\u003ee2e8e77\u003c/code\u003e\u003c/a\u003e Fix license specifier (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.1.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.2...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.2.0 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.38.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.38.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-jinja2` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-jinja2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-requests` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-requests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/...\n\n_Description has been truncated_","html_url":"https://github.com/monoscope-tech/oteldemo/pull/267","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/monoscope-tech%2Foteldemo/issues/267","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/267/packages"},{"uuid":"4499667855","node_id":"PR_kwDOPzk3Ms7eMbhe","number":286,"state":"closed","title":"build(deps): bump the pip-production-dependencies group across 3 directories with 19 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-01T06:50:56.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-22T03:48:44.000Z","updated_at":"2026-06-01T06:50:58.000Z","time_to_close":874932,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"pip-production-dependencies","update_count":19,"packages":[{"name":"grpcio-health-checking","old_version":"1.71.0","new_version":"1.80.0"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.2.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.37.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-dotenv","old_version":"1.1.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-json-logger","old_version":"3.3.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"locust-plugins","old_version":"4.7.0","new_version":"5.0.0","repository_url":"https://github.com/SvenskaSpel/locust-plugins"},{"name":"openfeature-provider-ofrep","old_version":"0.1.1","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.37.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.37.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 19 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `3.3.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [locust-plugins](https://github.com/SvenskaSpel/locust-plugins) | `4.7.0` | `5.0.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.1.1` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 14 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `3.3.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [locust-plugins](https://github.com/SvenskaSpel/locust-plugins) | `4.7.0` | `5.0.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.1.1` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 8 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `3.3.0` | `4.1.0` |\n\n\nUpdates `grpcio-health-checking` from 1.71.0 to 1.80.0\n\nUpdates `openfeature-hooks-opentelemetry` from 0.2.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emigrate to uv (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/293\"\u003e#293\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/9590554be4c8a7f77b0c0f20d6b48076c9870f52\"\u003e9590554\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a2ec682a709a4721f8362cfa6a9e6037937761ee\"\u003ea2ec682\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.4.0...openfeature-provider-flagd/v0.4.1\"\u003e0.4.1\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evarious custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003ec119a77\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eflagd:\u003c/strong\u003e extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e1995534\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.3.0...openfeature-provider-flagd/v0.4.0\"\u003e0.4.0\u003c/a\u003e (2026-04-01)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/83c3e48595c0f44b4a3259719a5d85fde987f492\"\u003e83c3e48\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eintroduce list for fatal status codes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/362\"\u003e#362\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/96a88ada622fb7941a1d4d58205ff3342180fa9a\"\u003e96a88ad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.7...openfeature-provider-flagd/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-03-11)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.2.7\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/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/564eb68aa513e6d8b5fb06aa5f632f427b11abe5\"\u003e\u003ccode\u003e564eb68\u003c/code\u003e\u003c/a\u003e fix(security): update dependency pytest to v9.0.3 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.3...openfeature-provider-flagd/v0.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.58b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-distro's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.37.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.37.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.0.0 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.0.0...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.1.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cpackham-atlnz\"\u003e\u003ccode\u003e@​cpackham-atlnz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/597\"\u003etheskumar/python-dotenv#597\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.2.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\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/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.1] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMove more config to \u003ccode\u003epyproject.toml\u003c/code\u003e, removed \u003ccode\u003esetup.cfg\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for reading \u003ccode\u003e.env\u003c/code\u003e from FIFOs (Unix) by [\u003ca href=\"https://github.com/sidharth-sudhir\"\u003e\u003ccode\u003e@​sidharth-sudhir\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/586\"\u003e#586\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.0] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade build system to use PEP 517 \u0026amp; PEP 518 to use \u003ccode\u003ebuild\u003c/code\u003e and \u003ccode\u003epyproject.toml\u003c/code\u003e by [\u003ca href=\"https://github.com/EpicWink\"\u003e\u003ccode\u003e@​EpicWink\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/583\"\u003e#583\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 by [\u003ca href=\"https://github.com/23f3001135\"\u003e\u003ccode\u003e@​23f3001135\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/579\"\u003e#579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for disabling of \u003ccode\u003eload_dotenv()\u003c/code\u003e using \u003ccode\u003ePYTHON_DOTENV_DISABLED\u003c/code\u003e env var. by [\u003ca href=\"https://github.com/matthewfranglen\"\u003e\u003ccode\u003e@​matthewfranglen\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/569\"\u003e#569\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/36004e0e34be7665ff2b11a8a4005144f76f176d\"\u003e\u003ccode\u003e36004e0\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.1 → 1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/eb202520e5933c9daf42501e1e42fdb0144002c8\"\u003e\u003ccode\u003eeb20252\u003c/code\u003e\u003c/a\u003e docs: update changelog for v1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e\u003ccode\u003e790c5c0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/43340da220fb4ca4f95357bbe21a3c7f8f1278b1\"\u003e\u003ccode\u003e43340da\u003c/code\u003e\u003c/a\u003e Remove the use of \u003ccode\u003esh\u003c/code\u003e in tests (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/09d7cee32459e7abdcb5c9d8122a552589c06a9c\"\u003e\u003ccode\u003e09d7cee\u003c/code\u003e\u003c/a\u003e docs: clarify override behavior and document FIFO support (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/c8de2887c00198c22842c5ae5e92d1747467363c\"\u003e\u003ccode\u003ec8de288\u003c/code\u003e\u003c/a\u003e ci: improve workflow efficiency with best practices (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/609\"\u003e#609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/7bd9e3dbfedc0983ad7d56d5570013035242bdf4\"\u003e\u003ccode\u003e7bd9e3d\u003c/code\u003e\u003c/a\u003e Add Windows testing to CI (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/1baaf04f336072e0ee324d5df9563ec767f14f81\"\u003e\u003ccode\u003e1baaf04\u003c/code\u003e\u003c/a\u003e Drop Python 3.9 support and update to PyPy 3.11 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a22cf8993804aeede0c20b75bb1a29d3a99e9dc\"\u003e\u003ccode\u003e4a22cf8\u003c/code\u003e\u003c/a\u003e ci: enable testing on Python 3.14t (free-threaded) (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e2e8e776b42e382ae38b44d3982dd649e7507dd4\"\u003e\u003ccode\u003ee2e8e77\u003c/code\u003e\u003c/a\u003e Fix license specifier (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.1.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 3.3.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.0.rc1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0.rc1\"\u003e4.0.0.rc1\u003c/a\u003e - 2025-09-07\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\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/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.2...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `locust-plugins` from 4.7.0 to 5.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/releases\"\u003elocust-plugins's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.0.0\u003c/h2\u003e\n\u003cp\u003eNo real new features, but the removals are a breaking change, hence the major version bump.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove MqttUser as it is now part of locust core by \u003ca href=\"https://github.com/ionutab\"\u003e\u003ccode\u003e@​ionutab\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SvenskaSpel/locust-plugins/pull/224\"\u003eSvenskaSpel/locust-plugins#224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove SocketIOUser now that it is part of locust core, update HttpSession usage to match locust 2.40.0 by \u003ca href=\"https://github.com/cyberw\"\u003e\u003ccode\u003e@​cyberw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SvenskaSpel/locust-plugins/pull/225\"\u003eSvenskaSpel/locust-plugins#225\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove import error catcher for legacy imports from locust plugins.users by \u003ca href=\"https://github.com/cyberw\"\u003e\u003ccode\u003e@​cyberw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SvenskaSpel/locust-plugins/pull/227\"\u003eSvenskaSpel/locust-plugins#227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/compare/4.7.0...5.0.0\"\u003ehttps://github.com/SvenskaSpel/locust-plugins/compare/4.7.0...5.0.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/SvenskaSpel/locust-plugins/commit/d60bb991b87663b25dd71ac6fe125019fcbfa325\"\u003e\u003ccode\u003ed60bb99\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/SvenskaSpel/locust-plugins/issues/227\"\u003e#227\u003c/a\u003e from SvenskaSpel/remove-import-error-catcher-for-impo...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/401308cdcd0bf52d32d63f92d82330117558a064\"\u003e\u003ccode\u003e401308c\u003c/code\u003e\u003c/a\u003e remove no_extras test in one more place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/97fbb45480d4842e02b1f3b1deea174570a639ef\"\u003e\u003ccode\u003e97fbb45\u003c/code\u003e\u003c/a\u003e fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/712d739d08be99964f9bc4875561547c052d5e9d\"\u003e\u003ccode\u003e712d739\u003c/code\u003e\u003c/a\u003e GH actions: use distributor_ex.py instead of rest_ex.py. Remove \u0026quot;no extras\u0026quot; t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/980c93b5601f8e593278087f91ec2e84e750e8ca\"\u003e\u003ccode\u003e980c93b\u003c/code\u003e\u003c/a\u003e Remove legacy import error catcher for imports from locust_plugins.users\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/937f0acf44a46096aefa6dcc75c406519b8a52fc\"\u003e\u003ccode\u003e937f0ac\u003c/code\u003e\u003c/a\u003e Remove RestUser placeholder\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/77d9c53f0cd9fdb52df754b4c791514e85914749\"\u003e\u003ccode\u003e77d9c53\u003c/code\u003e\u003c/a\u003e docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/6bf6522d15ccabb9e61ce49c617d211d64128c91\"\u003e\u003ccode\u003e6bf6522\u003c/code\u003e\u003c/a\u003e update readme to mention Users that have been added to core instead\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/0c0382d553f8a52083f3f0af1c48b82b8b487fc0\"\u003e\u003ccode\u003e0c0382d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/SvenskaSpel/locust-plugins/issues/225\"\u003e#225\u003c/a\u003e from SvenskaSpel/update-httpsession-usage-to-match-lo...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/b1f543242057f0b42ee7b24ae89011159548ead5\"\u003e\u003ccode\u003eb1f5432\u003c/code\u003e\u003c/a\u003e better error message for test_missing_extras\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/compare/4.7.0...5.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.1.1 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.2.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.1.1...openfeature-provider-ofrep/v0.2.0\"\u003e0.2.0\u003c/a\u003e (2025-09-25)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.8 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/187\"\u003e#187\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.8 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/187\"\u003e#187\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b55cc1e0f823d05a330c12af6861dbd3bec69c3a\"\u003eb55cc1e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereturn default dict if not meta provided (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/304\"\u003e#304\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/05c99eb9948902a6860af848327633d39f1c5293\"\u003e05c99eb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emigrate to uv (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/293\"\u003e#293\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/9590554be4c8a7f77b0c0f20d6b48076c9870f52\"\u003e9590554\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate python-sdk (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/289\"\u003e#289\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/f2028f5f81824310a842507a3127a3bb9bc8a984\"\u003ef2028f5\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.1.1...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.37.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca hr...\n\n_Description has been truncated_","html_url":"https://github.com/AcheampongStephen/OpenTelemetry/pull/286","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/AcheampongStephen%2FOpenTelemetry/issues/286","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/286/packages"},{"uuid":"4497837028","node_id":"PR_kwDORX-XEs7eGjAu","number":208,"state":"closed","title":"Bump the pip-production-dependencies group across 5 directories with 21 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-22T20:32:57.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-21T20:52:57.000Z","updated_at":"2026-05-22T20:32:59.000Z","time_to_close":85200,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-production-dependencies","update_count":21,"packages":[{"name":"grpcio-health-checking","old_version":"1.78.0","new_version":"1.80.0"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.3.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.60b1","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.39.1","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-dotenv","old_version":"1.2.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"psycopg2-binary","old_version":"2.9.11","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"openai","old_version":"2.17.0","new_version":"2.37.0","repository_url":"https://github.com/openai/openai-python"},{"name":"simplejson","old_version":"3.20.2","new_version":"4.1.1","repository_url":"https://github.com/simplejson/simplejson"},{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.39.1","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.60b1","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.60b1","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.60b1","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.60b1","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.39.1","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.60b1","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.60b1","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 21 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.17.0` | `2.37.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 4 updates in the /src/llm directory: [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib), [python-dotenv](https://github.com/theskumar/python-dotenv), [python-json-logger](https://github.com/nhairs/python-json-logger) and [flask](https://github.com/pallets/flask).\nBumps the pip-production-dependencies group with 13 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 11 updates in the /src/product-reviews directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.17.0` | `2.37.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n\nBumps the pip-production-dependencies group with 8 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n\n\nUpdates `grpcio-health-checking` from 1.78.0 to 1.80.0\n\nUpdates `openfeature-hooks-opentelemetry` from 0.3.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.4.0...openfeature-provider-flagd/v0.4.1\"\u003e0.4.1\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evarious custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003ec119a77\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eflagd:\u003c/strong\u003e extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e1995534\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.3.0...openfeature-provider-flagd/v0.4.0\"\u003e0.4.0\u003c/a\u003e (2026-04-01)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/83c3e48595c0f44b4a3259719a5d85fde987f492\"\u003e83c3e48\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eintroduce list for fatal status codes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/362\"\u003e#362\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/96a88ada622fb7941a1d4d58205ff3342180fa9a\"\u003e96a88ad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.7...openfeature-provider-flagd/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-03-11)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.2.7\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/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/564eb68aa513e6d8b5fb06aa5f632f427b11abe5\"\u003e\u003ccode\u003e564eb68\u003c/code\u003e\u003c/a\u003e fix(security): update dependency pytest to v9.0.3 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.3...openfeature-provider-flagd/v0.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.60b1 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.39.1 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.42.1/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.39.1...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.0.0 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.0.0...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.2.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cpackham-atlnz\"\u003e\u003ccode\u003e@​cpackham-atlnz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/597\"\u003etheskumar/python-dotenv#597\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/36004e0e34be7665ff2b11a8a4005144f76f176d\"\u003e\u003ccode\u003e36004e0\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.1 → 1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/eb202520e5933c9daf42501e1e42fdb0144002c8\"\u003e\u003ccode\u003eeb20252\u003c/code\u003e\u003c/a\u003e docs: update changelog for v1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e\u003ccode\u003e790c5c0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/43340da220fb4ca4f95357bbe21a3c7f8f1278b1\"\u003e\u003ccode\u003e43340da\u003c/code\u003e\u003c/a\u003e Remove the use of \u003ccode\u003esh\u003c/code\u003e in tests (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/09d7cee32459e7abdcb5c9d8122a552589c06a9c\"\u003e\u003ccode\u003e09d7cee\u003c/code\u003e\u003c/a\u003e docs: clarify override behavior and document FIFO support (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/c8de2887c00198c22842c5ae5e92d1747467363c\"\u003e\u003ccode\u003ec8de288\u003c/code\u003e\u003c/a\u003e ci: improve workflow efficiency with best practices (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/609\"\u003e#609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/7bd9e3dbfedc0983ad7d56d5570013035242bdf4\"\u003e\u003ccode\u003e7bd9e3d\u003c/code\u003e\u003c/a\u003e Add Windows testing to CI (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/1baaf04f336072e0ee324d5df9563ec767f14f81\"\u003e\u003ccode\u003e1baaf04\u003c/code\u003e\u003c/a\u003e Drop Python 3.9 support and update to PyPy 3.11 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a22cf8993804aeede0c20b75bb1a29d3a99e9dc\"\u003e\u003ccode\u003e4a22cf8\u003c/code\u003e\u003c/a\u003e ci: enable testing on Python 3.14t (free-threaded) (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e2e8e776b42e382ae38b44d3982dd649e7507dd4\"\u003e\u003ccode\u003ee2e8e77\u003c/code\u003e\u003c/a\u003e Fix license specifier (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.11 to 2.9.12\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWheel package bundled with PostgreSQL 16 libpq in order to add support for\nrecent features, such as \u003ccode\u003esslcertmode\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.7\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix propagation of exceptions raised during module initialization\n(:ticket:\u003ccode\u003e[#1598](https://github.com/psycopg/psycopg2/issues/1598)\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/psycopg/psycopg2/commit/3a6d9d6ddc6b53eaa80b712f5fa6b23abbdc38db\"\u003e\u003ccode\u003e3a6d9d6\u003c/code\u003e\u003c/a\u003e ci: include almalinux in whieel building\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/ebca6bf0f86bc6cbdc86de1eb3a53eaf49966d86\"\u003e\u003ccode\u003eebca6bf\u003c/code\u003e\u003c/a\u003e chore: bump to version 3.9.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/0196f02cc9512df8de3c941f87d27bda98f9f7af\"\u003e\u003ccode\u003e0196f02\u003c/code\u003e\u003c/a\u003e build(deps): bump pypa/cibuildwheel from 3.3.1 to 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d157bdc2235a42dc1742936dbb0f5cfc8e4d2eb7\"\u003e\u003ccode\u003ed157bdc\u003c/code\u003e\u003c/a\u003e build(deps): bump docker/setup-qemu-action from 3 to 4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/7fccc0f5066a40dea530512abbf02621f4182b81\"\u003e\u003ccode\u003e7fccc0f\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/upload-artifact from 6 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d52a61eb2e6095fc1b9891bfcca44ebfac509e55\"\u003e\u003ccode\u003ed52a61e\u003c/code\u003e\u003c/a\u003e chore: bump dependency libraries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/b231d726a01d55e07ec3620b2b82f4a2da37ba62\"\u003e\u003ccode\u003eb231d72\u003c/code\u003e\u003c/a\u003e chore: fix building binary images\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/6d76e8479f0f522c2e07ce0e2701030d8fd63785\"\u003e\u003ccode\u003e6d76e84\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg2/issues/1836\"\u003e#1836\u003c/a\u003e from psycopg/fix-1835\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f7e314c7ab418ab9b9956e694956089a49c5c3b9\"\u003e\u003ccode\u003ef7e314c\u003c/code\u003e\u003c/a\u003e fix: overflow in malformed interval\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/eb905c124b75f2a5183d22177b85af20914b0f17\"\u003e\u003ccode\u003eeb905c1\u003c/code\u003e\u003c/a\u003e docs: replace bare except clause with except Exception\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.11...2.9.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.17.0 to 2.37.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.37.0\u003c/h2\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\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 add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.36.0\u003c/h2\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.35.1\u003c/h2\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix imagegen \u003ccode\u003esize\u003c/code\u003e enum regression (\u003ca href=\"https://github.com/openai/openai-python/commit/44846536bc3b02c393daa5bae70a85de04c7f621\"\u003e4484653\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.35.0\u003c/h2\u003e\n\u003ch2\u003e2.35.0 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.34.0...v2.35.0\"\u003ev2.34.0...v2.35.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update image 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/0ba55d7569565045426e1587906a70d5682a4bba\"\u003e0ba55d7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/72bf67acbc9f030c20db3d5a1a74ea6d67d55f51\"\u003e72bf67a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove legacy python cli (\u003ca href=\"https://github.com/openai/openai-python/commit/32f36e447d02c3124af8ab48fcc3537df2fed66e\"\u003e32f36e4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erename legacy python cli entrypoint (\u003ca href=\"https://github.com/openai/openai-python/commit/a3b182d6d2c2e6fe1d53ca7550b2d43e0f8b2cd3\"\u003ea3b182d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\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 add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix imagegen \u003ccode\u003esize\u003c/code\u003e enum regression (\u003ca href=\"https://github.com/openai/openai-python/commit/44846536bc3b02c393daa5bae70a85de04c7f621\"\u003e4484653\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.35.0 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.34.0...v2.35.0\"\u003ev2.34.0...v2.35.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update image 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/0ba55d7569565045426e1587906a70d5682a4bba\"\u003e0ba55d7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/72bf67acbc9f030c20db3d5a1a74ea6d67d55f51\"\u003e72bf67a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove legacy python cli (\u003ca href=\"https://github.com/openai/openai-python/commit/32f36e447d02c3124af8ab48fcc3537df2fed66e\"\u003e32f36e4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erename legacy python cli entrypoint (\u003ca href=\"https://github.com/openai/openai-python/commit/a3b182d6d2c2e6fe1d53ca7550b2d43e0f8b2cd3\"\u003ea3b182d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/658be644f48028ea3c7b1545034470fda75a70ba\"\u003e\u003ccode\u003e658be64\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3213\"\u003e#3213\u003c/a\u003e from openai/release-please--branches--main--changes-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8a7cac34cbc64fe02854beb3659f4bb5f46815f9\"\u003e\u003ccode\u003e8a7cac3\u003c/code\u003e\u003c/a\u003e release: 2.37.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/9b4bf8edbac6aab217f1ac4436a47cbca2cad43b\"\u003e\u003ccode\u003e9b4bf8e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/1903\"\u003e#1903\u003c/a\u003e from stainless-sdks/dev/jtian/remove-unnecessary-params\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003e\u003ccode\u003ec39ea8d\u003c/code\u003e\u003c/a\u003e feat: Remove unnecessary client_id when using workload identity provider for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e\u003ccode\u003e7e527bc\u003c/code\u003e\u003c/a\u003e feat(internal/types): support eagerly validating pydantic iterators\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e\u003ccode\u003e625827c\u003c/code\u003e\u003c/a\u003e feat(api): add service_tier parameter to responses compact method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003e\u003ccode\u003ec85ebd9\u003c/code\u003e\u003c/a\u003e fix(client): add missing f-string prefix in file type error message\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/38d75d74a5626472cd7d1be9705ea8aba29a6b22\"\u003e\u003ccode\u003e38d75d7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3205\"\u003e#3205\u003c/a\u003e from openai/release-please--branches--main--changes-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/ff683ffbeba94fc01d93966b774c05a3471f2495\"\u003e\u003ccode\u003eff683ff\u003c/code\u003e\u003c/a\u003e release: 2.36.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e\u003ccode\u003e8fe0ab8\u003c/code\u003e\u003c/a\u003e feat(api): realtime 2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.17.0...v2.37.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `simplejson` from 3.20.2 to 4.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/simplejson/simplejson/releases\"\u003esimplejson's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Python 2.7 wheel builds for Windows platforms by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/378\"\u003esimplejson/simplejson#378\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.1.0...v4.1.1\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.1.0...v4.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAccelerate indented encoding in the C extension; release 4.1.0 by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/376\"\u003esimplejson/simplejson#376\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.0.1...v4.1.0\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.0.1...v4.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExclude Pyodide wheels from PyPI uploads by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/375\"\u003esimplejson/simplejson#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.0.0...v4.0.1\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.0.0...v4.0.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eVersion 4.0.0 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003esimplejson 4 requires Python 2.7 or Python 3.8+. Older Python\nversions (2.5, 2.6, 3.0-3.7) are no longer supported. pip will\nnot install simplejson 4 on unsupported versions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now uses heap types and per-module state instead of\nstatic types and global state. This is required for free-threading\nsupport and sub-interpreter isolation. The Python-level API is\nunchanged.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFull support for Python 3.13+ free-threading (PEP 703). The C\nextension is now safe to use with the GIL disabled (python3.14t):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eConverted all static types to heap types with per-module state\u003c/li\u003e\n\u003cli\u003eAdded per-object critical sections to scanner and encoder\u003c/li\u003e\n\u003cli\u003eAdded free-threading-safe dict operations for Python 3.13+\u003c/li\u003e\n\u003cli\u003eUnified per-module state management and templated parser\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/363\"\u003esimplejson/simplejson#363\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/364\"\u003esimplejson/simplejson#364\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/365\"\u003esimplejson/simplejson#365\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/367\"\u003esimplejson/simplejson#367\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/369\"\u003esimplejson/simplejson#369\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNumerous C extension memory safety fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix use-after-free and leak in encoder ident handling\u003c/li\u003e\n\u003cli\u003eFix NULL dereferences on OOM in module init and static string init\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/simplejson/simplejson/blob/main/CHANGES.txt\"\u003esimplejson's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eVersion 4.1.1 released 2026-04-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003ebuild_wheels_py27\u003c/code\u003e CI job now also builds Python 2.7 wheels\nfor Windows AMD64 and Windows x86, joining the existing Py2.7\nmanylinux1 / manylinux2010 x86_64 wheels. This unblocks offline /\n\u003ccode\u003e--no-index\u003c/code\u003e installs on Py2.7-on-Windows (the original\nreporter's case), which previously had no matching binary wheel on\nPyPI, fell through to the sdist, and failed on the PEP 517\nisolated-build step complaining that \u003ccode\u003esetuptools\u0026gt;=42\u003c/code\u003e was not in\nthe wheelhouse.\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/377\"\u003esimplejson/simplejson#377\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.1.0 released 2026-04-22\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now accelerates encoding when \u003ccode\u003eindent=\u003c/code\u003e is set.\nPreviously the encoder fell back to the pure-Python implementation\nwhenever a non-None \u003ccode\u003eindent\u003c/code\u003e was passed; now the C encoder emits\nthe newline-plus-indent prefix, the level-aware item separator, and\nthe closing indent directly.  A representative nested-dict workload\nbenchmarks about 4-5x faster end-to-end, and the \u003ccode\u003eindent=0\u003c/code\u003e and\nempty-container edge cases continue to match the Python output\nbyte-for-byte.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now emits PEP 678 \u003ccode\u003eexc.add_note()\u003c/code\u003e annotations on\nserialization failures, matching the pure-Python encoder.  A chained\nerror on \u003ccode\u003e{'a': [1, object(), 3]}\u003c/code\u003e produces the same three notes\n(\u003ccode\u003ewhen serializing object object\u003c/code\u003e, \u003ccode\u003ewhen serializing list item 1\u003c/code\u003e,\n\u003ccode\u003ewhen serializing dict item 'a'\u003c/code\u003e) whether the speedups are loaded\nor not, so the add_note assertions in \u003ccode\u003etest_errors.py\u003c/code\u003e no longer\nneed \u003ccode\u003eindent=2\u003c/code\u003e to force the Python path.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.0.1 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSkip uploading Pyodide/wasm wheels to PyPI, which rejects them with\n\u0026quot;unsupported platform tag 'pyodide_2024_0_wasm32'\u0026quot;. The wheels are\nstill built in CI and preserved as workflow artifacts.\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/375\"\u003esimplejson/simplejson#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.0.0 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003esimplejson 4 requires Python 2.7 or Python 3.8+. Older Python\nversions (2.5, 2.6, 3.0-3.7) are no longer supported. pip will\nnot install simplejson 4 on unsupported versions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now uses heap types and per-module state instead of\nstatic types and global state. This is required for free-threading\nsupport and sub-interpreter isolation. The Python-level API is\nunchanged.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFull support for Python 3.13+ free-threading (PEP 703). The C\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/639b2ee73b2de6b385fcd4d44e0e08054a4d8a0e\"\u003e\u003ccode\u003e639b2ee\u003c/code\u003e\u003c/a\u003e Add Python 2.7 wheel builds for Windows platforms (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/0fd3185ce301bdefe61bbbf510536fa9127962fb\"\u003e\u003ccode\u003e0fd3185\u003c/code\u003e\u003c/a\u003e Accelerate indented encoding in the C extension; release 4.1.0 (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/376\"\u003e#376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/19b5f94f235d3ac11646b82c02f292845b2aa184\"\u003e\u003ccode\u003e19b5f94\u003c/code\u003e\u003c/a\u003e Exclude Pyodide wheels from PyPI uploads (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/375\"\u003e#375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/1608c050bbc2ae67ddfe913dad83bed7d588aa27\"\u003e\u003ccode\u003e1608c05\u003c/code\u003e\u003c/a\u003e Use JSONDecodeError for out-of-range end indices in C scanstring (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/374\"\u003e#374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/3bba17935f12695355b5280df2a93bf963b704dd\"\u003e\u003ccode\u003e3bba179\u003c/code\u003e\u003c/a\u003e Encoder parity fixes (for_json/_asdict) and TSan stress CI job (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/7b22d65b92ac7e69f740f59fe11548216b79c098\"\u003e\u003ccode\u003e7b22d65\u003c/code\u003e\u003c/a\u003e Error parity for the C and Python scanstring in surrogate and truncated strin...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/825100a7fc498dafae31d10bef3e3cfaba1fdc5b\"\u003e\u003ccode\u003e825100a\u003c/code\u003e\u003c/a\u003e Release version 4.0.0: free-threading, CPython json parity, Python 2.7 fixes ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/0dbb9d875127a9009f01a4036fa950b0a5f4f589\"\u003e\u003ccode\u003e0dbb9d8\u003c/code\u003e\u003c/a\u003e C extension: dead code cleanup, fast paths for dict/list/string encoding, cor...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/e2e5f0b2d3bae3fd9a56bbaab42f6d75fb980ad5\"\u003e\u003ccode\u003ee2e5f0b\u003c/code\u003e\u003c/a\u003e Add Python 3.13+ free-threading support to dict operations (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/e817370a91f4f51a0aec5f0f7bdeb1ca601ed101\"\u003e\u003ccode\u003ee817370\u003c/code\u003e\u003c/a\u003e Fix free-threading (3.14t) crashes: heap types, unified per-module state, tem...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/simplejson/simplejson/compare/v3.20.2...v4.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Incre...\n\n_Description has been truncated_","html_url":"https://github.com/RANJITHKUMARJN/opentelemetrymain/pull/208","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/RANJITHKUMARJN%2Fopentelemetrymain/issues/208","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/208/packages"},{"uuid":"4483350481","node_id":"PR_kwDORxQaNc7dXhAk","number":147,"state":"closed","title":"build(deps): bump the pip-production-dependencies group across 5 directories with 18 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-21T23:42:43.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-20T05:12:21.000Z","updated_at":"2026-05-21T23:42:45.000Z","time_to_close":153022,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"pip-production-dependencies","update_count":18,"packages":[{"name":"grpcio-health-checking","old_version":"1.78.0","new_version":"1.80.0"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.61b0","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.40.0","new_version":"1.42.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"psycopg2-binary","old_version":"2.9.11","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"openai","old_version":"2.26.0","new_version":"2.37.0","repository_url":"https://github.com/openai/openai-python"},{"name":"simplejson","old_version":"3.20.2","new_version":"4.1.1","repository_url":"https://github.com/simplejson/simplejson"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.40.0","new_version":"1.42.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.61b0","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.61b0","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.61b0","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.61b0","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.40.0","new_version":"1.42.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.61b0","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.61b0","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 18 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.26.0` | `2.37.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n\nBumps the pip-production-dependencies group with 2 updates in the /src/llm directory: [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) and [python-json-logger](https://github.com/nhairs/python-json-logger).\nBumps the pip-production-dependencies group with 11 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n\nBumps the pip-production-dependencies group with 9 updates in the /src/product-reviews directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.26.0` | `2.37.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n\nBumps the pip-production-dependencies group with 6 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n\n\nUpdates `grpcio-health-checking` from 1.78.0 to 1.80.0\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.4.0...openfeature-provider-flagd/v0.4.1\"\u003e0.4.1\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evarious custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003ec119a77\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eflagd:\u003c/strong\u003e extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e1995534\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.3.0...openfeature-provider-flagd/v0.4.0\"\u003e0.4.0\u003c/a\u003e (2026-04-01)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/83c3e48595c0f44b4a3259719a5d85fde987f492\"\u003e83c3e48\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eintroduce list for fatal status codes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/362\"\u003e#362\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/96a88ada622fb7941a1d4d58205ff3342180fa9a\"\u003e96a88ad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.7...openfeature-provider-flagd/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-03-11)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.2.7\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/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/564eb68aa513e6d8b5fb06aa5f632f427b11abe5\"\u003e\u003ccode\u003e564eb68\u003c/code\u003e\u003c/a\u003e fix(security): update dependency pytest to v9.0.3 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.3...openfeature-provider-flagd/v0.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.61b0 to 0.63b0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-distro's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: update auto-instrumentation to re-inject\ninstrumentation path after init\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4469\"\u003e#4469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e: Add Database client operation duration\nand returned rows metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4481\"\u003e#4481\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments\nand add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Use \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e to\nformat and extract each log record's body text to more closely match the\nexpected usage of the logging system. As a result, all OTel log record bodies\nare now always strings. Previously, if \u003ccode\u003eLogRecord.msg\u003c/code\u003e (which contains the\nformat string) was set to a non-string object (e.g.\n\u003ccode\u003elogger.warning(some_dict)\u003c/code\u003e), the object was exported as-is to the OTLP body\nfield. Now, \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e will convert it to to a string. If you\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.40.0 to 1.42.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add propagator plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_propagator\u003c/code\u003e entry point group, matching\nthe spec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5098\"\u003e#5098\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add exporter plugin loading to declarative file\nconfiguration for all three signals (traces, metrics, logs) via the\n\u003ccode\u003eopentelemetry_*_exporter\u003c/code\u003e entry point groups, matching the spec's\nPluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5128\"\u003e#5128\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/85eb40ac3a43a165c22d86919b32c77e74f94e6b\"\u003e\u003ccode\u003e85eb40a\u003c/code\u003e\u003c/a\u003e ci: migrate unreleased changelog entries to towncrier fragments (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5213\"\u003e#5213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/369644cfec249c48ca3aad0a4f6500e52d316689\"\u003e\u003ccode\u003e369644c\u003c/code\u003e\u003c/a\u003e docs: add new example for multi-destination exporting to Sphinx Doc (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5087\"\u003e#5087\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.40.0...v1.42.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.0.0 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.0.0...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.11 to 2.9.12\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWheel package bundled with PostgreSQL 16 libpq in order to add support for\nrecent features, such as \u003ccode\u003esslcertmode\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.7\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix propagation of exceptions raised during module initialization\n(:ticket:\u003ccode\u003e[#1598](https://github.com/psycopg/psycopg2/issues/1598)\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/psycopg/psycopg2/commit/3a6d9d6ddc6b53eaa80b712f5fa6b23abbdc38db\"\u003e\u003ccode\u003e3a6d9d6\u003c/code\u003e\u003c/a\u003e ci: include almalinux in whieel building\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/ebca6bf0f86bc6cbdc86de1eb3a53eaf49966d86\"\u003e\u003ccode\u003eebca6bf\u003c/code\u003e\u003c/a\u003e chore: bump to version 3.9.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/0196f02cc9512df8de3c941f87d27bda98f9f7af\"\u003e\u003ccode\u003e0196f02\u003c/code\u003e\u003c/a\u003e build(deps): bump pypa/cibuildwheel from 3.3.1 to 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d157bdc2235a42dc1742936dbb0f5cfc8e4d2eb7\"\u003e\u003ccode\u003ed157bdc\u003c/code\u003e\u003c/a\u003e build(deps): bump docker/setup-qemu-action from 3 to 4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/7fccc0f5066a40dea530512abbf02621f4182b81\"\u003e\u003ccode\u003e7fccc0f\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/upload-artifact from 6 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d52a61eb2e6095fc1b9891bfcca44ebfac509e55\"\u003e\u003ccode\u003ed52a61e\u003c/code\u003e\u003c/a\u003e chore: bump dependency libraries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/b231d726a01d55e07ec3620b2b82f4a2da37ba62\"\u003e\u003ccode\u003eb231d72\u003c/code\u003e\u003c/a\u003e chore: fix building binary images\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/6d76e8479f0f522c2e07ce0e2701030d8fd63785\"\u003e\u003ccode\u003e6d76e84\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg2/issues/1836\"\u003e#1836\u003c/a\u003e from psycopg/fix-1835\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f7e314c7ab418ab9b9956e694956089a49c5c3b9\"\u003e\u003ccode\u003ef7e314c\u003c/code\u003e\u003c/a\u003e fix: overflow in malformed interval\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/eb905c124b75f2a5183d22177b85af20914b0f17\"\u003e\u003ccode\u003eeb905c1\u003c/code\u003e\u003c/a\u003e docs: replace bare except clause with except Exception\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.11...2.9.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.26.0 to 2.37.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.37.0\u003c/h2\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\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 add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.36.0\u003c/h2\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.35.1\u003c/h2\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix imagegen \u003ccode\u003esize\u003c/code\u003e enum regression (\u003ca href=\"https://github.com/openai/openai-python/commit/44846536bc3b02c393daa5bae70a85de04c7f621\"\u003e4484653\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.35.0\u003c/h2\u003e\n\u003ch2\u003e2.35.0 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.34.0...v2.35.0\"\u003ev2.34.0...v2.35.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update image 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/0ba55d7569565045426e1587906a70d5682a4bba\"\u003e0ba55d7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/72bf67acbc9f030c20db3d5a1a74ea6d67d55f51\"\u003e72bf67a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove legacy python cli (\u003ca href=\"https://github.com/openai/openai-python/commit/32f36e447d02c3124af8ab48fcc3537df2fed66e\"\u003e32f36e4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erename legacy python cli entrypoint (\u003ca href=\"https://github.com/openai/openai-python/commit/a3b182d6d2c2e6fe1d53ca7550b2d43e0f8b2cd3\"\u003ea3b182d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\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 add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix imagegen \u003ccode\u003esize\u003c/code\u003e enum regression (\u003ca href=\"https://github.com/openai/openai-python/commit/44846536bc3b02c393daa5bae70a85de04c7f621\"\u003e4484653\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.35.0 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.34.0...v2.35.0\"\u003ev2.34.0...v2.35.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update image 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/0ba55d7569565045426e1587906a70d5682a4bba\"\u003e0ba55d7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/72bf67acbc9f030c20db3d5a1a74ea6d67d55f51\"\u003e72bf67a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove legacy python cli (\u003ca href=\"https://github.com/openai/openai-python/commit/32f36e447d02c3124af8ab48fcc3537df2fed66e\"\u003e32f36e4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erename legacy python cli entrypoint (\u003ca href=\"https://github.com/openai/openai-python/commit/a3b182d6d2c2e6fe1d53ca7550b2d43e0f8b2cd3\"\u003ea3b182d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/658be644f48028ea3c7b1545034470fda75a70ba\"\u003e\u003ccode\u003e658be64\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3213\"\u003e#3213\u003c/a\u003e from openai/release-please--branches--main--changes-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8a7cac34cbc64fe02854beb3659f4bb5f46815f9\"\u003e\u003ccode\u003e8a7cac3\u003c/code\u003e\u003c/a\u003e release: 2.37.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/9b4bf8edbac6aab217f1ac4436a47cbca2cad43b\"\u003e\u003ccode\u003e9b4bf8e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/1903\"\u003e#1903\u003c/a\u003e from stainless-sdks/dev/jtian/remove-unnecessary-params\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003e\u003ccode\u003ec39ea8d\u003c/code\u003e\u003c/a\u003e feat: Remove unnecessary client_id when using workload identity provider for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e\u003ccode\u003e7e527bc\u003c/code\u003e\u003c/a\u003e feat(internal/types): support eagerly validating pydantic iterators\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e\u003ccode\u003e625827c\u003c/code\u003e\u003c/a\u003e feat(api): add service_tier parameter to responses compact method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003e\u003ccode\u003ec85ebd9\u003c/code\u003e\u003c/a\u003e fix(client): add missing f-string prefix in file type error message\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/38d75d74a5626472cd7d1be9705ea8aba29a6b22\"\u003e\u003ccode\u003e38d75d7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3205\"\u003e#3205\u003c/a\u003e from openai/release-please--branches--main--changes-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/ff683ffbeba94fc01d93966b774c05a3471f2495\"\u003e\u003ccode\u003eff683ff\u003c/code\u003e\u003c/a\u003e release: 2.36.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e\u003ccode\u003e8fe0ab8\u003c/code\u003e\u003c/a\u003e feat(api): realtime 2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.26.0...v2.37.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `simplejson` from 3.20.2 to 4.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/simplejson/simplejson/releases\"\u003esimplejson's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Python 2.7 wheel builds for Windows platforms by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/378\"\u003esimplejson/simplejson#378\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.1.0...v4.1.1\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.1.0...v4.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAccelerate indented encoding in the C extension; release 4.1.0 by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/376\"\u003esimplejson/simplejson#376\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.0.1...v4.1.0\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.0.1...v4.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExclude Pyodide wheels from PyPI uploads by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/375\"\u003esimplejson/simplejson#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.0.0...v4.0.1\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.0.0...v4.0.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eVersion 4.0.0 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003esimplejson 4 requires Python 2.7 or Python 3.8+. Older Python\nversions (2.5, 2.6, 3.0-3.7) are no longer supported. pip will\nnot install simplejson 4 on unsupported versions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now uses heap types and per-module state instead of\nstatic types and global state. This is required for free-threading\nsupport and sub-interpreter isolation. The Python-level API is\nunchanged.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFull support for Python 3.13+ free-threading (PEP 703). The C\nextension is now safe to use with the GIL disabled (python3.14t):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eConverted all static types to heap types with per-module state\u003c/li\u003e\n\u003cli\u003eAdded per-object critical sections to scanner and encoder\u003c/li\u003e\n\u003cli\u003eAdded free-threading-safe dict operations for Python 3.13+\u003c/li\u003e\n\u003cli\u003eUnified per-module state management and templated parser\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/363\"\u003esimplejson/simplejson#363\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/364\"\u003esimplejson/simplejson#364\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/365\"\u003esimplejson/simplejson#365\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/367\"\u003esimplejson/simplejson#367\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/369\"\u003esimplejson/simplejson#369\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNumerous C extension memory safety fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix use-after-free and leak in encoder ident handling\u003c/li\u003e\n\u003cli\u003eFix NULL dereferences on OOM in module init and static string init\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/simplejson/simplejson/blob/main/CHANGES.txt\"\u003esimplejson's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eVersion 4.1.1 released 2026-04-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003ebuild_wheels_py27\u003c/code\u003e CI job now also builds Python 2.7 wheels\nfor Windows AMD64 and Windows x86, joining the existing Py2.7\nmanylinux1 / manylinux2010 x86_64 wheels. This unblocks offline /\n\u003ccode\u003e--no-index\u003c/code\u003e installs on Py2.7-on-Windows (the original\nreporter's case), which previously had no matching binary wheel on\nPyPI, fell through to the sdist, and failed on the PEP 517\nisolated-build step complaining that \u003ccode\u003esetuptools\u0026gt;=42\u003c/code\u003e was not in\nthe wheelhouse.\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/377\"\u003esimplejson/simplejson#377\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.1.0 released 2026-04-22\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now accelerates encoding when \u003ccode\u003eindent=\u003c/code\u003e is set.\nPreviously the encoder fell back to the pure-Python implementation\nwhenever a non-None \u003ccode\u003eindent\u003c/code\u003e was passed; now the C encoder emits\nthe newline-plus-indent prefix, the level-aware item separator, and\nthe closing indent directly.  A representative nested-dict workload\nbenchmarks about 4-5x faster end-to-end, and the \u003ccode\u003eindent=0\u003c/code\u003e and\nempty-container edge cases continue to match the Python output\nbyte-for-byte.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now emits PEP 678 \u003ccode\u003eexc.add_note()\u003c/code\u003e annotations on\nserialization failures, matching the pure-Python encoder.  A chained\nerror on \u003ccode\u003e{'a': [1, object(), 3]}\u003c/code\u003e produces the same three notes\n(\u003ccode\u003ewhen serializing object object\u003c/code\u003e, \u003ccode\u003ewhen serializing list item 1\u003c/code\u003e,\n\u003ccode\u003ewhen serializing dict item 'a'\u003c/code\u003e) whether the speedups are loaded\nor not, so the add_note assertions in \u003ccode\u003etest_errors.py\u003c/code\u003e no longer\nneed \u003ccode\u003eindent=2\u003c/code\u003e to force the Python path.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.0.1 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSkip uploading Pyodide/wasm wheels to PyPI, which rejects them with\n\u0026quot;unsupported platform tag 'pyodide_2024_0_wasm32'\u0026quot;. The wheels are\nstill built in CI and preserved as workflow artifacts.\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/375\"\u003esimplejson/simplejson#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.0.0 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003esimplejson 4 requires Python 2.7 or Python 3.8+. Older Python\nversions (2.5, 2.6, 3.0-3.7) are no longer supported. pip will\nnot install simplejson 4 on unsupported versions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now uses heap types and per-module state instead of\nstatic types and global state. This is required for free-threading\nsupport and sub-interpreter isolation. The Python-level API is\nunchanged.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFull support for Python 3.13+ free-threading (PEP 703). The C\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/639b2ee73b2de6b385fcd4d44e0e08054a4d8a0e\"\u003e\u003ccode\u003e639b2ee\u003c/code\u003e\u003c/a\u003e Add Python 2.7 wheel builds for Windows platforms (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/0fd3185ce301bdefe61bbbf510536fa9127962fb\"\u003e\u003ccode\u003e0fd3185\u003c/code\u003e\u003c/a\u003e Accelerate indented encoding in the C extension; release 4.1.0 (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/376\"\u003e#376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/19b5f94f235d3ac11646b82c02f292845b2aa184\"\u003e\u003ccode\u003e19b5f94\u003c/code\u003e\u003c/a\u003e Exclude Pyodide wheels from PyPI uploads (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/375\"\u003e#375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/1608c050bbc2ae67ddfe913dad83bed7d588aa27\"\u003e\u003ccode\u003e1608c05\u003c/code\u003e\u003c/a\u003e Use JSONDecodeError for out-of-range end indices in C scanstring (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/374\"\u003e#374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/3bba17935f12695355b5280df2a93bf963b704dd\"\u003e\u003ccode\u003e3bba179\u003c/code\u003e\u003c/a\u003e Encoder parity fixes (for_json/_asdict) and TSan stress CI job (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/7b22d65b92ac7e69f740f59fe11548216b79c098\"\u003e\u003ccode\u003e7b22d65\u003c/code\u003e\u003c/a\u003e Error parity for the C and Python scanstring in surrogate and truncated strin...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/825100a7fc498dafae31d10bef3e3cfaba1fdc5b\"\u003e\u003ccode\u003e825100a\u003c/code\u003e\u003c/a\u003e Release version 4.0.0: free-threading, CPython json parity, Python 2.7 fixes ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/0dbb9d875127a9009f01a4036fa950b0a5f4f589\"\u003e\u003ccode\u003e0dbb9d8\u003c/code\u003e\u003c/a\u003e C extension: dead code cleanup, fast paths for dict/list/string encoding, cor...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/e2e5f0b2d3bae3fd9a56bbaab42f6d75fb980ad5\"\u003e\u003ccode\u003ee2e5f0b\u003c/code\u003e\u003c/a\u003e Add Python 3.13+ free-threading support to dict operations (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/e817370a91f4f51a0aec5f0f7bdeb1ca601ed101\"\u003e\u003ccode\u003ee817370\u003c/code\u003e\u003c/a\u003e Fix free-threading (3.14t) crashes: heap types, unified per-module state, tem...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/simplejson/simplejson/compare/v3.20.2...v4.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.2.0 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.40.0 to 1.42.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add propagator plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_propagator\u003c/code\u003e entry point group, matching\nthe spec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5098\"\u003e#5098\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add exporter plugin loading to declarative file\nconfiguration for all three signals (traces, metrics, logs) via the\n\u003ccode\u003eopentelemetry_*_exporter\u003c/code\u003e entry point groups, matching the spec's\nPluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5128\"\u003e#5128\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/85eb40ac3a43a165c22d86919b32c77e74f94e6b\"\u003e\u003ccode\u003e85eb40a\u003c/code\u003e\u003c/a\u003e ci: migrate unreleased changelog entries to towncrier fragments (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5213\"\u003e#5213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/369644cfec249c48ca3aad0a4f6500e52d316689\"\u003e\u003ccode\u003e369644c\u003c/code\u003e\u003c/a\u003e docs: add new example for multi-destination exporting to Sphinx Doc (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5087\"\u003e#5087\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.40.0...v1.42.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-jinja2` from 0.61b0 to 0.63b0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-jinja2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288...\n\n_Description has been truncated_","html_url":"https://github.com/GuanceDemo/OpenTelemetry_Demo/pull/147","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuanceDemo%2FOpenTelemetry_Demo/issues/147","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/147/packages"},{"uuid":"4479950861","node_id":"PR_kwDORn2jFc7dMmNk","number":125,"state":"closed","title":"Bump the pip-production-dependencies group across 5 directories with 21 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-22T05:44:42.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-19T18:25:02.000Z","updated_at":"2026-05-22T05:44:44.000Z","time_to_close":213580,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-production-dependencies","update_count":21,"packages":[{"name":"grpcio-health-checking","old_version":"1.78.0","new_version":"1.80.0"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.3.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.60b1","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.39.1","new_version":"1.42.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-dotenv","old_version":"1.2.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"psycopg2-binary","old_version":"2.9.11","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"openai","old_version":"2.17.0","new_version":"2.37.0","repository_url":"https://github.com/openai/openai-python"},{"name":"simplejson","old_version":"3.20.2","new_version":"4.1.1","repository_url":"https://github.com/simplejson/simplejson"},{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.39.1","new_version":"1.42.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.60b1","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.60b1","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.60b1","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.60b1","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.39.1","new_version":"1.42.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.60b1","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.60b1","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 21 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.17.0` | `2.37.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n\nBumps the pip-production-dependencies group with 4 updates in the /src/llm directory: [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib), [python-dotenv](https://github.com/theskumar/python-dotenv), [python-json-logger](https://github.com/nhairs/python-json-logger) and [flask](https://github.com/pallets/flask).\nBumps the pip-production-dependencies group with 13 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n\nBumps the pip-production-dependencies group with 11 updates in the /src/product-reviews directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.17.0` | `2.37.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n\nBumps the pip-production-dependencies group with 8 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n\n\nUpdates `grpcio-health-checking` from 1.78.0 to 1.80.0\n\nUpdates `openfeature-hooks-opentelemetry` from 0.3.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.4.0...openfeature-provider-flagd/v0.4.1\"\u003e0.4.1\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evarious custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003ec119a77\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eflagd:\u003c/strong\u003e extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e1995534\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.3.0...openfeature-provider-flagd/v0.4.0\"\u003e0.4.0\u003c/a\u003e (2026-04-01)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/83c3e48595c0f44b4a3259719a5d85fde987f492\"\u003e83c3e48\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eintroduce list for fatal status codes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/362\"\u003e#362\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/96a88ada622fb7941a1d4d58205ff3342180fa9a\"\u003e96a88ad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.7...openfeature-provider-flagd/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-03-11)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.2.7\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/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/564eb68aa513e6d8b5fb06aa5f632f427b11abe5\"\u003e\u003ccode\u003e564eb68\u003c/code\u003e\u003c/a\u003e fix(security): update dependency pytest to v9.0.3 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.3...openfeature-provider-flagd/v0.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.60b1 to 0.63b0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.39.1 to 1.42.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.42.0/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add propagator plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_propagator\u003c/code\u003e entry point group, matching\nthe spec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5098\"\u003e#5098\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add exporter plugin loading to declarative file\nconfiguration for all three signals (traces, metrics, logs) via the\n\u003ccode\u003eopentelemetry_*_exporter\u003c/code\u003e entry point groups, matching the spec's\nPluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5128\"\u003e#5128\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/85eb40ac3a43a165c22d86919b32c77e74f94e6b\"\u003e\u003ccode\u003e85eb40a\u003c/code\u003e\u003c/a\u003e ci: migrate unreleased changelog entries to towncrier fragments (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5213\"\u003e#5213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/369644cfec249c48ca3aad0a4f6500e52d316689\"\u003e\u003ccode\u003e369644c\u003c/code\u003e\u003c/a\u003e docs: add new example for multi-destination exporting to Sphinx Doc (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5087\"\u003e#5087\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.39.1...v1.42.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.0.0 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.0.0...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.2.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cpackham-atlnz\"\u003e\u003ccode\u003e@​cpackham-atlnz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/597\"\u003etheskumar/python-dotenv#597\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/36004e0e34be7665ff2b11a8a4005144f76f176d\"\u003e\u003ccode\u003e36004e0\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.1 → 1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/eb202520e5933c9daf42501e1e42fdb0144002c8\"\u003e\u003ccode\u003eeb20252\u003c/code\u003e\u003c/a\u003e docs: update changelog for v1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e\u003ccode\u003e790c5c0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/43340da220fb4ca4f95357bbe21a3c7f8f1278b1\"\u003e\u003ccode\u003e43340da\u003c/code\u003e\u003c/a\u003e Remove the use of \u003ccode\u003esh\u003c/code\u003e in tests (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/09d7cee32459e7abdcb5c9d8122a552589c06a9c\"\u003e\u003ccode\u003e09d7cee\u003c/code\u003e\u003c/a\u003e docs: clarify override behavior and document FIFO support (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/c8de2887c00198c22842c5ae5e92d1747467363c\"\u003e\u003ccode\u003ec8de288\u003c/code\u003e\u003c/a\u003e ci: improve workflow efficiency with best practices (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/609\"\u003e#609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/7bd9e3dbfedc0983ad7d56d5570013035242bdf4\"\u003e\u003ccode\u003e7bd9e3d\u003c/code\u003e\u003c/a\u003e Add Windows testing to CI (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/1baaf04f336072e0ee324d5df9563ec767f14f81\"\u003e\u003ccode\u003e1baaf04\u003c/code\u003e\u003c/a\u003e Drop Python 3.9 support and update to PyPy 3.11 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a22cf8993804aeede0c20b75bb1a29d3a99e9dc\"\u003e\u003ccode\u003e4a22cf8\u003c/code\u003e\u003c/a\u003e ci: enable testing on Python 3.14t (free-threaded) (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e2e8e776b42e382ae38b44d3982dd649e7507dd4\"\u003e\u003ccode\u003ee2e8e77\u003c/code\u003e\u003c/a\u003e Fix license specifier (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.11 to 2.9.12\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWheel package bundled with PostgreSQL 16 libpq in order to add support for\nrecent features, such as \u003ccode\u003esslcertmode\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.7\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix propagation of exceptions raised during module initialization\n(:ticket:\u003ccode\u003e[#1598](https://github.com/psycopg/psycopg2/issues/1598)\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/psycopg/psycopg2/commit/3a6d9d6ddc6b53eaa80b712f5fa6b23abbdc38db\"\u003e\u003ccode\u003e3a6d9d6\u003c/code\u003e\u003c/a\u003e ci: include almalinux in whieel building\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/ebca6bf0f86bc6cbdc86de1eb3a53eaf49966d86\"\u003e\u003ccode\u003eebca6bf\u003c/code\u003e\u003c/a\u003e chore: bump to version 3.9.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/0196f02cc9512df8de3c941f87d27bda98f9f7af\"\u003e\u003ccode\u003e0196f02\u003c/code\u003e\u003c/a\u003e build(deps): bump pypa/cibuildwheel from 3.3.1 to 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d157bdc2235a42dc1742936dbb0f5cfc8e4d2eb7\"\u003e\u003ccode\u003ed157bdc\u003c/code\u003e\u003c/a\u003e build(deps): bump docker/setup-qemu-action from 3 to 4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/7fccc0f5066a40dea530512abbf02621f4182b81\"\u003e\u003ccode\u003e7fccc0f\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/upload-artifact from 6 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d52a61eb2e6095fc1b9891bfcca44ebfac509e55\"\u003e\u003ccode\u003ed52a61e\u003c/code\u003e\u003c/a\u003e chore: bump dependency libraries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/b231d726a01d55e07ec3620b2b82f4a2da37ba62\"\u003e\u003ccode\u003eb231d72\u003c/code\u003e\u003c/a\u003e chore: fix building binary images\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/6d76e8479f0f522c2e07ce0e2701030d8fd63785\"\u003e\u003ccode\u003e6d76e84\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg2/issues/1836\"\u003e#1836\u003c/a\u003e from psycopg/fix-1835\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f7e314c7ab418ab9b9956e694956089a49c5c3b9\"\u003e\u003ccode\u003ef7e314c\u003c/code\u003e\u003c/a\u003e fix: overflow in malformed interval\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/eb905c124b75f2a5183d22177b85af20914b0f17\"\u003e\u003ccode\u003eeb905c1\u003c/code\u003e\u003c/a\u003e docs: replace bare except clause with except Exception\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.11...2.9.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.17.0 to 2.37.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.37.0\u003c/h2\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\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 add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.36.0\u003c/h2\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.35.1\u003c/h2\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix imagegen \u003ccode\u003esize\u003c/code\u003e enum regression (\u003ca href=\"https://github.com/openai/openai-python/commit/44846536bc3b02c393daa5bae70a85de04c7f621\"\u003e4484653\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.35.0\u003c/h2\u003e\n\u003ch2\u003e2.35.0 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.34.0...v2.35.0\"\u003ev2.34.0...v2.35.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update image 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/0ba55d7569565045426e1587906a70d5682a4bba\"\u003e0ba55d7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/72bf67acbc9f030c20db3d5a1a74ea6d67d55f51\"\u003e72bf67a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove legacy python cli (\u003ca href=\"https://github.com/openai/openai-python/commit/32f36e447d02c3124af8ab48fcc3537df2fed66e\"\u003e32f36e4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erename legacy python cli entrypoint (\u003ca href=\"https://github.com/openai/openai-python/commit/a3b182d6d2c2e6fe1d53ca7550b2d43e0f8b2cd3\"\u003ea3b182d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\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 add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix imagegen \u003ccode\u003esize\u003c/code\u003e enum regression (\u003ca href=\"https://github.com/openai/openai-python/commit/44846536bc3b02c393daa5bae70a85de04c7f621\"\u003e4484653\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.35.0 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.34.0...v2.35.0\"\u003ev2.34.0...v2.35.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update image 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/0ba55d7569565045426e1587906a70d5682a4bba\"\u003e0ba55d7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/72bf67acbc9f030c20db3d5a1a74ea6d67d55f51\"\u003e72bf67a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove legacy python cli (\u003ca href=\"https://github.com/openai/openai-python/commit/32f36e447d02c3124af8ab48fcc3537df2fed66e\"\u003e32f36e4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erename legacy python cli entrypoint (\u003ca href=\"https://github.com/openai/openai-python/commit/a3b182d6d2c2e6fe1d53ca7550b2d43e0f8b2cd3\"\u003ea3b182d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/658be644f48028ea3c7b1545034470fda75a70ba\"\u003e\u003ccode\u003e658be64\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3213\"\u003e#3213\u003c/a\u003e from openai/release-please--branches--main--changes-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8a7cac34cbc64fe02854beb3659f4bb5f46815f9\"\u003e\u003ccode\u003e8a7cac3\u003c/code\u003e\u003c/a\u003e release: 2.37.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/9b4bf8edbac6aab217f1ac4436a47cbca2cad43b\"\u003e\u003ccode\u003e9b4bf8e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/1903\"\u003e#1903\u003c/a\u003e from stainless-sdks/dev/jtian/remove-unnecessary-params\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003e\u003ccode\u003ec39ea8d\u003c/code\u003e\u003c/a\u003e feat: Remove unnecessary client_id when using workload identity provider for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e\u003ccode\u003e7e527bc\u003c/code\u003e\u003c/a\u003e feat(internal/types): support eagerly validating pydantic iterators\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e\u003ccode\u003e625827c\u003c/code\u003e\u003c/a\u003e feat(api): add service_tier parameter to responses compact method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003e\u003ccode\u003ec85ebd9\u003c/code\u003e\u003c/a\u003e fix(client): add missing f-string prefix in file type error message\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/38d75d74a5626472cd7d1be9705ea8aba29a6b22\"\u003e\u003ccode\u003e38d75d7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3205\"\u003e#3205\u003c/a\u003e from openai/release-please--branches--main--changes-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/ff683ffbeba94fc01d93966b774c05a3471f2495\"\u003e\u003ccode\u003eff683ff\u003c/code\u003e\u003c/a\u003e release: 2.36.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e\u003ccode\u003e8fe0ab8\u003c/code\u003e\u003c/a\u003e feat(api): realtime 2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.17.0...v2.37.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `simplejson` from 3.20.2 to 4.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/simplejson/simplejson/releases\"\u003esimplejson's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Python 2.7 wheel builds for Windows platforms by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/378\"\u003esimplejson/simplejson#378\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.1.0...v4.1.1\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.1.0...v4.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAccelerate indented encoding in the C extension; release 4.1.0 by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/376\"\u003esimplejson/simplejson#376\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.0.1...v4.1.0\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.0.1...v4.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExclude Pyodide wheels from PyPI uploads by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/375\"\u003esimplejson/simplejson#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.0.0...v4.0.1\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.0.0...v4.0.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eVersion 4.0.0 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003esimplejson 4 requires Python 2.7 or Python 3.8+. Older Python\nversions (2.5, 2.6, 3.0-3.7) are no longer supported. pip will\nnot install simplejson 4 on unsupported versions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now uses heap types and per-module state instead of\nstatic types and global state. This is required for free-threading\nsupport and sub-interpreter isolation. The Python-level API is\nunchanged.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFull support for Python 3.13+ free-threading (PEP 703). The C\nextension is now safe to use with the GIL disabled (python3.14t):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eConverted all static types to heap types with per-module state\u003c/li\u003e\n\u003cli\u003eAdded per-object critical sections to scanner and encoder\u003c/li\u003e\n\u003cli\u003eAdded free-threading-safe dict operations for Python 3.13+\u003c/li\u003e\n\u003cli\u003eUnified per-module state management and templated parser\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/363\"\u003esimplejson/simplejson#363\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/364\"\u003esimplejson/simplejson#364\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/365\"\u003esimplejson/simplejson#365\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/367\"\u003esimplejson/simplejson#367\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/369\"\u003esimplejson/simplejson#369\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNumerous C extension memory safety fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix use-after-free and leak in encoder ident handling\u003c/li\u003e\n\u003cli\u003eFix NULL dereferences on OOM in module init and static string init\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/simplejson/simplejson/blob/main/CHANGES.txt\"\u003esimplejson's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eVersion 4.1.1 released 2026-04-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003ebuild_wheels_py27\u003c/code\u003e CI job now also builds Python 2.7 wheels\nfor Windows AMD64 and Windows x86, joining the existing Py2.7\nmanylinux1 / manylinux2010 x86_64 wheels. This unblocks offline /\n\u003ccode\u003e--no-index\u003c/code\u003e installs on Py2.7-on-Windows (the original\nreporter's case), which previously had no matching binary wheel on\nPyPI, fell through to the sdist, and failed on the PEP 517\nisolated-build step complaining that \u003ccode\u003esetuptools\u0026gt;=42\u003c/code\u003e was not in\nthe wheelhouse.\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/377\"\u003esimplejson/simplejson#377\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.1.0 released 2026-04-22\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now accelerates encoding when \u003ccode\u003eindent=\u003c/code\u003e is set.\nPreviously the encoder fell back to the pure-Python implementation\nwhenever a non-None \u003ccode\u003eindent\u003c/code\u003e was passed; now the C encoder emits\nthe newline-plus-indent prefix, the level-aware item separator, and\nthe closing indent directly.  A representative nested-dict workload\nbenchmarks about 4-5x faster end-to-end, and the \u003ccode\u003eindent=0\u003c/code\u003e and\nempty-container edge cases continue to match the Python output\nbyte-for-byte.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now emits PEP 678 \u003ccode\u003eexc.add_note()\u003c/code\u003e annotations on\nserialization failures, matching the pure-Python encoder.  A chained\nerror on \u003ccode\u003e{'a': [1, object(), 3]}\u003c/code\u003e produces the same three notes\n(\u003ccode\u003ewhen serializing object object\u003c/code\u003e, \u003ccode\u003ewhen serializing list item 1\u003c/code\u003e,\n\u003ccode\u003ewhen serializing dict item 'a'\u003c/code\u003e) whether the speedups are loaded\nor not, so the add_note assertions in \u003ccode\u003etest_errors.py\u003c/code\u003e no longer\nneed \u003ccode\u003eindent=2\u003c/code\u003e to force the Python path.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.0.1 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSkip uploading Pyodide/wasm wheels to PyPI, which rejects them with\n\u0026quot;unsupported platform tag 'pyodide_2024_0_wasm32'\u0026quot;. The wheels are\nstill built in CI and preserved as workflow artifacts.\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/375\"\u003esimplejson/simplejson#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.0.0 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003esimplejson 4 requires Python 2.7 or Python 3.8+. Older Python\nversions (2.5, 2.6, 3.0-3.7) are no longer supported. pip will\nnot install simplejson 4 on unsupported versions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now uses heap types and per-module state instead of\nstatic types and global state. This is required for free-threading\nsupport and sub-interpreter isolation. The Python-level API is\nunchanged.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFull support for Python 3.13+ free-threading (PEP 703). The C\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/639b2ee73b2de6b385fcd4d44e0e08054a4d8a0e\"\u003e\u003ccode\u003e639b2ee\u003c/code\u003e\u003c/a\u003e Add Python 2.7 wheel builds for Windows platforms (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/0fd3185ce301bdefe61bbbf510536fa9127962fb\"\u003e\u003ccode\u003e0fd3185\u003c/code\u003e\u003c/a\u003e Accelerate indented encoding in the C extension; release 4.1.0 (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/376\"\u003e#376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/19b5f94f235d3ac11646b82c02f292845b2aa184\"\u003e\u003ccode\u003e19b5f94\u003c/code\u003e\u003c/a\u003e Exclude Pyodide wheels from PyPI uploads (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/375\"\u003e#375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/1608c050bbc2ae67ddfe913dad83bed7d588aa27\"\u003e\u003ccode\u003e1608c05\u003c/code\u003e\u003c/a\u003e Use JSONDecodeError for out-of-range end indices in C scanstring (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/374\"\u003e#374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/3bba17935f12695355b5280df2a93bf963b704dd\"\u003e\u003ccode\u003e3bba179\u003c/code\u003e\u003c/a\u003e Encoder parity fixes (for_json/_asdict) and TSan stress CI job (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/7b22d65b92ac7e69f740f59fe11548216b79c098\"\u003e\u003ccode\u003e7b22d65\u003c/code\u003e\u003c/a\u003e Error parity for the C and Python scanstring in surrogate and truncated strin...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/825100a7fc498dafae31d10bef3e3cfaba1fdc5b\"\u003e\u003ccode\u003e825100a\u003c/code\u003e\u003c/a\u003e Release version 4.0.0: free-threading, CPython json parity, Python 2.7 fixes ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/0dbb9d875127a9009f01a4036fa950b0a5f4f589\"\u003e\u003ccode\u003e0dbb9d8\u003c/code\u003e\u003c/a\u003e C extension: dead code cleanup, fast paths for dict/list/string encoding, cor...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/e2e5f0b2d3bae3fd9a56bbaab42f6d75fb980ad5\"\u003e\u003ccode\u003ee2e5f0b\u003c/code\u003e\u003c/a\u003e Add Python 3.13+ free-threading support to dict operations (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/e817370a91f4f51a0aec5f0f7bdeb1ca601ed101\"\u003e\u003ccode\u003ee817370\u003c/code\u003e\u003c/a\u003e Fix free-threading (3.14t) crashes: heap types, unified per-module state, tem...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/simplejson/simplejson/compare/v3.20.2...v4.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/...\n\n_Description has been truncated_","html_url":"https://github.com/brianlangbecker/opentelemetry-demo-ld/pull/125","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/brianlangbecker%2Fopentelemetry-demo-ld/issues/125","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/125/packages"},{"uuid":"4453610885","node_id":"PR_kwDORYW3fc7b5gKB","number":12,"state":"closed","title":"Bump python-json-logger from 2.0.7 to 4.1.0","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-28T00:26:03.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-15T11:41:58.000Z","updated_at":"2026-05-28T00:26:12.000Z","time_to_close":1082645,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"python-json-logger","old_version":"2.0.7","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":null,"ecosystem":"pip"},"body":"Bumps [python-json-logger](https://github.com/nhairs/python-json-logger) from 2.0.7 to 4.1.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.0.rc1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0.rc1\"\u003e4.0.0.rc1\u003c/a\u003e - 2025-09-07\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.0...v3.2.1\"\u003e3.2.1\u003c/a\u003e - 2024-12-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImport error on \u003ccode\u003eimport pythonjsonlogger.jsonlogger\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/29\"\u003e#29\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/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v2.0.7...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n","html_url":"https://github.com/NextApple-Bot/telegram-bot/pull/12","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/NextApple-Bot%2Ftelegram-bot/issues/12","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/12/packages"},{"uuid":"4427081441","node_id":"PR_kwDOQkhN-M7akNst","number":247,"state":"closed","title":"Bump the pip-production-dependencies group across 9 directories with 23 updates","user":"dependabot[bot]","labels":["dependencies","python","helm-update-required"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-14T02:21:51.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-12T07:25:45.000Z","updated_at":"2026-05-14T02:21:52.000Z","time_to_close":154566,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-production-dependencies","update_count":23,"packages":[{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.2.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.38.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.38.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.59b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.59b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.59b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.59b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.38.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [flask](https://github.com/pallets/flask), [python-json-logger](https://github.com/nhairs/python-json-logger), [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib), [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib), [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib), [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib), [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib), [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib), [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib), [grpcio-health-checking](https://grpc.io), [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib), [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib), [psutil](https://github.com/giampaolo/psutil), [python-dotenv](https://github.com/theskumar/python-dotenv), [psycopg2-binary](https://github.com/psycopg/psycopg2), [openai](https://github.com/openai/openai-python), [simplejson](https://github.com/simplejson/simplejson), [requests](https://github.com/psf/requests) and [google-generativeai](https://github.com/google/generative-ai-python) to permit the latest version.\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.2...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.2.0 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-hooks-opentelemetry` from 0.2.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emigrate to uv (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/293\"\u003e#293\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/9590554be4c8a7f77b0c0f20d6b48076c9870f52\"\u003e9590554\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a2ec682a709a4721f8362cfa6a9e6037937761ee\"\u003ea2ec682\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.38.0 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.38.0...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.38.0 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.38.0...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-jinja2` from 0.59b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-jinja2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler utility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in \u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a \u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-requests` from 0.59b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-requests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler utility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in \u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a \u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-system-metrics` from 0.59b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-system-metrics's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler utility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in \u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a \u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-urllib3` from 0.59b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-urllib3's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler utility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in \u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a \u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-sdk` from 1.38.0 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcop...\n\n_Description has been truncated_","html_url":"https://github.com/DangThanhWang/test_monitor/pull/247","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/DangThanhWang%2Ftest_monitor/issues/247","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/247/packages"},{"uuid":"4412661938","node_id":"PR_kwDOR95XKc7Z2jzD","number":51,"state":"closed","title":"chore(deps): bump python-json-logger from 4.0.0 to 4.1.0 in /src/emailservice","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-10T01:25:08.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-09T13:37:44.000Z","updated_at":"2026-05-10T01:25:10.000Z","time_to_close":42444,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":"/src/emailservice","ecosystem":"pip"},"body":"Bumps [python-json-logger](https://github.com/nhairs/python-json-logger) from 4.0.0 to 4.1.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e","html_url":"https://github.com/however-yir/however-microservices-lab/pull/51","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/however-yir%2Fhowever-microservices-lab/issues/51","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/51/packages"},{"uuid":"4406805073","node_id":"PR_kwDORB4xOs7ZjYFt","number":229,"state":"closed","title":"Bump the pip-production-dependencies group across 5 directories with 21 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-18T23:27:17.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-08T13:38:27.000Z","updated_at":"2026-05-18T23:27:19.000Z","time_to_close":899330,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-production-dependencies","update_count":21,"packages":[{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.3.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.39.1","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.39.1","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.60b1","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.60b1","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.60b1","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.60b1","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.39.1","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.60b1","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.60b1","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"grpcio-health-checking","old_version":"1.71.0","new_version":"1.80.0"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.60b1","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-dotenv","old_version":"1.2.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"psycopg2-binary","old_version":"2.9.11","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"openai","old_version":"2.15.0","new_version":"2.36.0","repository_url":"https://github.com/openai/openai-python"},{"name":"simplejson","old_version":"3.20.2","new_version":"4.1.1","repository_url":"https://github.com/simplejson/simplejson"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 21 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.15.0` | `2.36.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n\nBumps the pip-production-dependencies group with 4 updates in the /src/llm directory: [flask](https://github.com/pallets/flask), [python-json-logger](https://github.com/nhairs/python-json-logger), [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) and [python-dotenv](https://github.com/theskumar/python-dotenv).\nBumps the pip-production-dependencies group with 13 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n\nBumps the pip-production-dependencies group with 11 updates in the /src/product-reviews directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.15.0` | `2.36.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n\nBumps the pip-production-dependencies group with 8 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.2...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.2.0 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-hooks-opentelemetry` from 0.3.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.39.1 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.39.1...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.39.1 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.39.1...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-jinja2` from 0.60b1 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-requests` from 0.60b1 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-system-metrics` from 0.60b1 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-urllib3` from 0.60b1 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-sdk` from 1.39.1 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.39.1...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-semantic-conventions` from 0.60b1 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-logging` from 0.60b1 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio-health-checking` from 1.71.0 to 1.80.0\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.4.0...openfeature-provider-flagd/v0.4.1\"\u003e0.4.1\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evarious custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003ec119a77\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eflagd:\u003c/strong\u003e extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e1995534\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.3.0...openfeature-provider-flagd/v0.4.0\"\u003e0.4.0\u003c/a\u003e (2026-04-01)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/83c3e48595c0f44b4a3259719a5d85fde987f492\"\u003e83c3e48\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eintroduce list for fatal status codes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/362\"\u003e#362\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/96a88ada622fb7941a1d4d58205ff3342180fa9a\"\u003e96a88ad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.7...openfeature-provider-flagd/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-03-11)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.2.7\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/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/564eb68aa513e6d8b5fb06aa5f632f427b11abe5\"\u003e\u003ccode\u003e564eb68\u003c/code\u003e\u003c/a\u003e fix(security): update dependency pytest to v9.0.3 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.3...openfeature-provider-flagd/v0.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.60b1 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.0.0 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.0.0...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.2.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in packag...\n\n_Description has been truncated_","html_url":"https://github.com/rishikeshradhakrishnan/opentelemetry-demo/pull/229","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/rishikeshradhakrishnan%2Fopentelemetry-demo/issues/229","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/229/packages"},{"uuid":"4402667842","node_id":"PR_kwDORxQaNc7ZV0gj","number":120,"state":"closed","title":"build(deps): bump the pip-production-dependencies group across 5 directories with 18 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-15T23:43:29.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-07T23:44:13.000Z","updated_at":"2026-05-15T23:43:30.000Z","time_to_close":691156,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"pip-production-dependencies","update_count":18,"packages":[{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.40.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.40.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.61b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.61b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.61b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.61b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.40.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.61b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.61b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"grpcio-health-checking","old_version":"1.78.0","new_version":"1.80.0"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.61b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"psycopg2-binary","old_version":"2.9.11","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"openai","old_version":"2.26.0","new_version":"2.36.0","repository_url":"https://github.com/openai/openai-python"},{"name":"simplejson","old_version":"3.20.2","new_version":"4.1.1","repository_url":"https://github.com/simplejson/simplejson"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 18 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.26.0` | `2.36.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n\nBumps the pip-production-dependencies group with 2 updates in the /src/llm directory: [python-json-logger](https://github.com/nhairs/python-json-logger) and [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib).\nBumps the pip-production-dependencies group with 11 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n\nBumps the pip-production-dependencies group with 9 updates in the /src/product-reviews directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.26.0` | `2.36.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n\nBumps the pip-production-dependencies group with 6 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.2.0 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.40.0 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.40.0...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.40.0 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.40.0...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-jinja2` from 0.61b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-jinja2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/issues/4397\"\u003e#4397\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-aiohttp-server\u003c/code\u003e: Use \u003ccode\u003ecanonical\u003c/code\u003e attribute of the \u003ccode\u003eResource\u003c/code\u003e as a span name\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3896\"\u003e#3896\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-requests` from 0.61b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-requests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/issues/4397\"\u003e#4397\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-aiohttp-server\u003c/code\u003e: Use \u003ccode\u003ecanonical\u003c/code\u003e attribute of the \u003ccode\u003eResource\u003c/code\u003e as a span name\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3896\"\u003e#3896\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-system-metrics` from 0.61b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-system-metrics's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/issues/4397\"\u003e#4397\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-aiohttp-server\u003c/code\u003e: Use \u003ccode\u003ecanonical\u003c/code\u003e attribute of the \u003ccode\u003eResource\u003c/code\u003e as a span name\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3896\"\u003e#3896\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-urllib3` from 0.61b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-urllib3's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/issues/4397\"\u003e#4397\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-aiohttp-server\u003c/code\u003e: Use \u003ccode\u003ecanonical\u003c/code\u003e attribute of the \u003ccode\u003eResource\u003c/code\u003e as a span name\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3896\"\u003e#3896\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-sdk` from 1.40.0 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.40.0...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-semantic-conventions` from 0.61b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-semantic-conventions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eBreaking changes ongoing\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!IMPORTANT]\nWe are working on stabilizing the Log signal that would require making deprecations and breaking changes. We will try to reduce the releases that may require an update to your code, especially for instrumentations or for sdk developers.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eApply fixes for \u003ccode\u003eUP\u003c/code\u003e ruff rule\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5133\"\u003e#5133\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5177\"\u003e#5177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Enforce W3C Baggage size limits on outbound propagation in \u003ccode\u003eW3CBaggagePropagator.inject()\u003c/code\u003e. Previously only inbound extraction enforced limits; now inject also caps entries at 180, individual pairs at 4096 bytes, and total header at 8192 bytes per the W3C Baggage spec. The extract path max_pairs limit now counts all size-valid entries rather than only successfully parsed ones.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5163\"\u003e#5163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eadditional_properties\u003c/code\u003e support to generated config models via custom \u003ccode\u003edatamodel-codegen\u003c/code\u003e template, enabling plugin/custom component names to flow through typed dataclasses\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5131\"\u003e#5131\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix incorrect code example in \u003ccode\u003ecreate_tracer()\u003c/code\u003e docstring\n(\u003ca href=\"https:/...\n\n_Description has been truncated_","html_url":"https://github.com/GuanceDemo/OpenTelemetry_Demo/pull/120","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuanceDemo%2FOpenTelemetry_Demo/issues/120","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/120/packages"},{"uuid":"4375925636","node_id":"PR_kwDORAid8c7X-VsW","number":685,"state":"open","title":"chore(backend)(deps): update python-json-logger requirement from \u003c3.0.0,\u003e=2.0.4 to \u003e=3.3.0,\u003c4.0.0 in /backend","user":"dependabot[bot]","labels":["backend"],"assignees":[],"locked":false,"comments_count":4,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-04T10:52:10.000Z","updated_at":"2026-05-04T11:00:31.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(backend)(deps): update","packages":[{"name":"python-json-logger","old_version":"\u003c3.0.0,\u003e=2.0.4","new_version":"\u003e=3.3.0,\u003c4.0.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":"/backend","ecosystem":"pip"},"body":"Updates the requirements on [python-json-logger](https://github.com/nhairs/python-json-logger) 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/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.0...v3.2.1\"\u003e3.2.1\u003c/a\u003e - 2024-12-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImport error on \u003ccode\u003eimport pythonjsonlogger.jsonlogger\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/29\"\u003e#29\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.1.0...v3.2.0\"\u003e3.2.0\u003c/a\u003e - 2024-12-11\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epythonjsonlogger.[ORJSON,MSGSPEC]_AVAILABLE\u003c/code\u003e no longer imports the respective package when determining availability.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003epythonjsonlogger.[orjson,msgspec]\u003c/code\u003e now throws a \u003ccode\u003epythonjsonlogger.exception.MissingPackageError\u003c/code\u003e when required libraries are not available. These contain more information about what is missing whilst still being an \u003ccode\u003eImportError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edefaults\u003c/code\u003e parameter is no longer ignored and now conforms to the standard library. Setting a defaults dictionary will add the specified keys if the those keys do not exist in a record or weren't passed by the \u003ccode\u003eextra\u003c/code\u003e parameter when logging a message.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etyping_extensions\u003c/code\u003e is only installed on Python version \u0026lt; 3.10.\u003c/li\u003e\n\u003cli\u003eSupport Python 3.13\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003emsgspec\u003c/code\u003e has only been tested against pre-release versions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/cjwatson\"\u003e\u003ccode\u003e@​cjwatson\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/bharel\"\u003e\u003ccode\u003e@​bharel\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.0.1...v3.1.0\"\u003e3.1.0\u003c/a\u003e - 2023-05-28\u003c/h2\u003e\n\u003cp\u003eThis splits common funcitonality out to allow supporting other JSON encoders. Although this is a large refactor, backwards compatibility has been maintained.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epythonjsonlogger.core\u003c/code\u003e - more details below.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003epythonjsonlogger.defaults\u003c/code\u003e module that provides many functions for handling unsupported types.\u003c/li\u003e\n\u003cli\u003eOrjson encoder support via \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e with the following additions:\n\u003cul\u003e\n\u003cli\u003ebytes are URL safe base64 encoded.\u003c/li\u003e\n\u003cli\u003eExceptions are \u0026quot;pretty printed\u0026quot; using the exception name and message e.g. \u003ccode\u003e\u0026quot;ValueError: bad value passed\u0026quot;\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eEnum values use their value, Enum classes now return all values as a list.\u003c/li\u003e\n\u003cli\u003eTracebacks are supported\u003c/li\u003e\n\u003cli\u003eClasses (aka types) are support\u003c/li\u003e\n\u003cli\u003eWill fallback on \u003ccode\u003e__str__\u003c/code\u003e if available, else \u003ccode\u003e__repr__\u003c/code\u003e if available, else will use \u003ccode\u003e__could_not_encode__\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eMsgSpec encoder support via \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e with the following additions:\n\u003cul\u003e\n\u003cli\u003eExceptions are \u0026quot;pretty printed\u0026quot; using the exception name and message e.g. \u003ccode\u003e\u0026quot;ValueError: bad value passed\u0026quot;\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eEnum classes now return all values as a list.\u003c/li\u003e\n\u003cli\u003eTracebacks are supported\u003c/li\u003e\n\u003cli\u003eClasses (aka types) are support\u003c/li\u003e\n\u003cli\u003eWill fallback on \u003ccode\u003e__str__\u003c/code\u003e if available, else \u003ccode\u003e__repr__\u003c/code\u003e if available, else will use \u003ccode\u003e__could_not_encode__\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eNote: msgspec only supprts enum values of type \u003ccode\u003eint\u003c/code\u003e or \u003ccode\u003estr\u003c/code\u003e \u003ca href=\"https://redirect.github.com/jcrist/msgspec/issues/680\"\u003ejcrist/msgspec#680\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/9e6cb679dfb56cb82d9a8cc91f956efd72427055\"\u003e\u003ccode\u003e9e6cb67\u003c/code\u003e\u003c/a\u003e Release 3.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/db04a0f9066cc331f8d6177f828fe073c7b2a4cc\"\u003e\u003ccode\u003edb04a0f\u003c/code\u003e\u003c/a\u003e Add options to encode stack information into an array (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/39\"\u003e#39\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0092ea0be1cd28e3c1da51eaa084c503bb3710b7\"\u003e\u003ccode\u003e0092ea0\u003c/code\u003e\u003c/a\u003e Move to uv (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/40\"\u003e#40\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/1ce81a3614d8c77389a9c048d341593e2a7467e7\"\u003e\u003ccode\u003e1ce81a3\u003c/code\u003e\u003c/a\u003e [tests] Update tests for msgspec 0.19.0 (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/41\"\u003e#41\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/e7761e56edb980cfab0165e32469d5fd017a5d72\"\u003e\u003ccode\u003ee7761e5\u003c/code\u003e\u003c/a\u003e Fix import pthonjsonlogger.jsonlogger (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/33\"\u003e#33\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/36f160e93071d1de8b160a107914e99f1ac983d3\"\u003e\u003ccode\u003e36f160e\u003c/code\u003e\u003c/a\u003e [docs,readme] add PyPI monthly downloads badge (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/34\"\u003e#34\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/f96de2222ef60d4ab34b29d067db8b59642bf657\"\u003e\u003ccode\u003ef96de22\u003c/code\u003e\u003c/a\u003e [docs,readme] The fork is now released on PyPI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/c6c804171381b7500823a8f151101a56f80853a8\"\u003e\u003ccode\u003ec6c8041\u003c/code\u003e\u003c/a\u003e Release 3.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/e5d03eb682fee2fd1b31295a4af4053dcf7d731a\"\u003e\u003ccode\u003ee5d03eb\u003c/code\u003e\u003c/a\u003e [docs.contributing] Add PSF affiliation clarification\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2548e3a2e3cedf6bef3ee7c60c55b7c02d1af11a\"\u003e\u003ccode\u003e2548e3a\u003c/code\u003e\u003c/a\u003e [pyproject] Support Python 3.13 (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/23\"\u003e#23\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v2.0.4...v3.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\n\u003c!-- This is an auto-generated comment: release notes by coderabbit.ai --\u003e\n\n## Summary by CodeRabbit\n\n* **Chores**\n  * Updated backend logging dependency to a newer stable version.\n\n\u003c!-- end of auto-generated comment: release notes by coderabbit.ai --\u003e","html_url":"https://github.com/tjsasakifln/PNCP-poc/pull/685","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tjsasakifln%2FPNCP-poc/issues/685","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/685/packages"},{"uuid":"4374496342","node_id":"PR_kwDOOYEWwc7X5mx0","number":15,"state":"open","title":"chore(deps): bump python-json-logger from 2.0.7 to 4.1.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-05-04T06:42:27.000Z","updated_at":"2026-05-04T06:42:28.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"python-json-logger","old_version":"2.0.7","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":null,"ecosystem":"pip"},"body":"Bumps [python-json-logger](https://github.com/nhairs/python-json-logger) from 2.0.7 to 4.1.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.0.rc1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0.rc1\"\u003e4.0.0.rc1\u003c/a\u003e - 2025-09-07\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.0...v3.2.1\"\u003e3.2.1\u003c/a\u003e - 2024-12-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImport error on \u003ccode\u003eimport pythonjsonlogger.jsonlogger\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/29\"\u003e#29\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/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v2.0.7...v4.1.0\"\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=python-json-logger\u0026package-manager=pip\u0026previous-version=2.0.7\u0026new-version=4.1.0)](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/Pablo-Cubides/chatbot-whatsapp-llm/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pablo-Cubides%2Fchatbot-whatsapp-llm/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"},{"uuid":"4371603012","node_id":"PR_kwDOROagjc7Xwytt","number":7,"state":"closed","title":"Chore(deps): Bump the python-dependencies group across 1 directory with 72 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-10T11:07:16.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-03T11:17:28.000Z","updated_at":"2026-05-10T11:07:18.000Z","time_to_close":604188,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Chore(deps): Bump","group_name":"python-dependencies","update_count":72,"packages":[{"name":"altair","old_version":"6.0.0","new_version":"6.1.0","repository_url":"https://github.com/vega/altair"},{"name":"anyio","old_version":"4.12.1","new_version":"4.13.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"async-lru","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/aio-libs/async-lru"},{"name":"attrs","old_version":"25.4.0","new_version":"26.1.0","repository_url":"https://github.com/python-attrs/attrs"},{"name":"cachetools","old_version":"6.2.6","new_version":"7.1.0","repository_url":"https://github.com/tkem/cachetools"},{"name":"certifi","old_version":"2026.1.4","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"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":"cryptography","old_version":"46.0.7","new_version":"47.0.0","repository_url":"https://github.com/pyca/cryptography"},{"name":"filelock","old_version":"3.28.0","new_version":"3.29.0","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"fonttools","old_version":"4.61.1","new_version":"4.62.1","repository_url":"https://github.com/fonttools/fonttools"},{"name":"gitpython","old_version":"3.1.46","new_version":"3.1.49","repository_url":"https://github.com/gitpython-developers/GitPython"},{"name":"groq","old_version":"0.37.1","new_version":"1.2.0","repository_url":"https://github.com/groq/groq-python"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"ipython","old_version":"9.10.0","new_version":"9.13.0","repository_url":"https://github.com/ipython/ipython"},{"name":"jedi","old_version":"0.19.2","new_version":"0.20.0","repository_url":"https://github.com/davidhalter/jedi"},{"name":"json5","old_version":"0.13.0","new_version":"0.14.0","repository_url":"https://github.com/dpranke/pyjson5"},{"name":"jsonpointer","old_version":"3.0.0","new_version":"3.1.1","repository_url":"https://github.com/stefankoegl/python-json-pointer"},{"name":"jupyter-events","old_version":"0.12.0","new_version":"0.12.1","repository_url":"https://github.com/jupyter/jupyter_events"},{"name":"jupyter-lsp","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/jupyter-lsp/jupyterlab-lsp"},{"name":"jupyterlab","old_version":"4.5.4","new_version":"4.5.7","repository_url":"https://github.com/jupyterlab/jupyterlab"},{"name":"kiwisolver","old_version":"1.4.9","new_version":"1.5.0","repository_url":"https://github.com/nucleic/kiwi"},{"name":"langchain","old_version":"1.2.15","new_version":"1.2.17","repository_url":"https://github.com/langchain-ai/langchain"},{"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.10","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langgraph-checkpoint","old_version":"4.0.2","new_version":"4.0.3","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langgraph-prebuilt","old_version":"1.0.10","new_version":"1.0.13","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langsmith","old_version":"0.7.32","new_version":"0.8.0","repository_url":"https://github.com/langchain-ai/langsmith-sdk"},{"name":"llvmlite","old_version":"0.46.0b1","new_version":"0.47.0","repository_url":"https://github.com/numba/llvmlite"},{"name":"mako","old_version":"1.3.10","new_version":"1.3.12","repository_url":"https://github.com/sqlalchemy/mako"},{"name":"markupsafe","old_version":"2.1.5","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"matplotlib","old_version":"3.10.8","new_version":"3.10.9","repository_url":"https://github.com/matplotlib/matplotlib"},{"name":"narwhals","old_version":"2.16.0","new_version":"2.20.0","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"nbconvert","old_version":"7.17.0","new_version":"7.17.1","repository_url":"https://github.com/jupyter/nbconvert"},{"name":"notebook","old_version":"7.5.3","new_version":"7.5.6","repository_url":"https://github.com/jupyter/notebook"},{"name":"numba","old_version":"0.63.0b1","new_version":"0.65.1","repository_url":"https://github.com/numba/numba"},{"name":"numpy","old_version":"2.4.2","new_version":"2.4.4","repository_url":"https://github.com/numpy/numpy"},{"name":"optuna","old_version":"4.7.0","new_version":"4.8.0","repository_url":"https://github.com/optuna/optuna"},{"name":"packaging","old_version":"26.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pandas","old_version":"2.3.3","new_version":"3.0.2","repository_url":"https://github.com/pandas-dev/pandas"},{"name":"parso","old_version":"0.8.6","new_version":"0.8.7","repository_url":"https://github.com/davidhalter/parso"},{"name":"pdfminer-six","old_version":"20251230","new_version":"20260107","repository_url":"https://github.com/pdfminer/pdfminer.six"},{"name":"pillow","old_version":"12.1.1","new_version":"12.2.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"platformdirs","old_version":"4.5.1","new_version":"4.9.6","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"plotly","old_version":"5.18.0","new_version":"6.7.0","repository_url":"https://github.com/plotly/plotly.py"},{"name":"pre-commit","old_version":"4.5.1","new_version":"4.6.0","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"prometheus-client","old_version":"0.24.1","new_version":"0.25.0","repository_url":"https://github.com/prometheus/client_python"},{"name":"protobuf","old_version":"6.33.5","new_version":"7.34.1","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pyarrow","old_version":"23.0.0","new_version":"24.0.0","repository_url":"https://github.com/apache/arrow"},{"name":"pydantic","old_version":"2.13.2","new_version":"2.13.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.46.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydeck","old_version":"0.9.1","new_version":"0.9.2","repository_url":"https://github.com/visgl/deck.gl"},{"name":"pygments","old_version":"2.19.2","new_version":"2.20.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pypdfium2","old_version":"5.7.0","new_version":"5.7.1","repository_url":"https://github.com/pypdfium2-team/pypdfium2"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"pytz","old_version":"2025.2","new_version":"2026.1.post1","repository_url":"https://github.com/stub42/pytz"},{"name":"requests","old_version":"2.32.5","new_version":"2.33.1","repository_url":"https://github.com/psf/requests"},{"name":"ruff","old_version":"0.15.11","new_version":"0.15.12","repository_url":"https://github.com/astral-sh/ruff"},{"name":"scipy","old_version":"1.17.0","new_version":"1.17.1","repository_url":"https://github.com/scipy/scipy"},{"name":"setuptools","old_version":"82.0.0","new_version":"82.0.1","repository_url":"https://github.com/pypa/setuptools"},{"name":"shap","old_version":"0.50.0","new_version":"0.51.0","repository_url":"https://github.com/shap/shap"},{"name":"smmap","old_version":"5.0.2","new_version":"5.0.3","repository_url":"https://github.com/gitpython-developers/smmap"},{"name":"sqlalchemy","old_version":"2.0.47","new_version":"2.0.49","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"streamlit","old_version":"1.54.0","new_version":"1.57.0","repository_url":"https://github.com/streamlit/streamlit"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"tornado","old_version":"6.5.4","new_version":"6.5.5","repository_url":"https://github.com/tornadoweb/tornado"},{"name":"traitlets","old_version":"5.14","new_version":"5.14.3","repository_url":"https://github.com/ipython/traitlets"},{"name":"tzdata","old_version":"2025.3","new_version":"2026.2","repository_url":"https://github.com/python/tzdata"},{"name":"virtualenv","old_version":"21.2.4","new_version":"21.3.0","repository_url":"https://github.com/pypa/virtualenv"},{"name":"wcwidth","old_version":"0.6.0","new_version":"0.7.0","repository_url":"https://github.com/jquast/wcwidth"},{"name":"xgboost","old_version":"2.1.4","new_version":"3.2.0","repository_url":"https://github.com/dmlc/xgboost"},{"name":"xxhash","old_version":"3.6.0","new_version":"3.7.0","repository_url":"https://github.com/ifduyue/python-xxhash"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-dependencies group with 72 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [altair](https://github.com/vega/altair) | `6.0.0` | `6.1.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.12.1` | `4.13.0` |\n| [async-lru](https://github.com/aio-libs/async-lru) | `2.1.0` | `2.3.0` |\n| [attrs](https://github.com/python-attrs/attrs) | `25.4.0` | `26.1.0` |\n| [cachetools](https://github.com/tkem/cachetools) | `6.2.6` | `7.1.0` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.1.4` | `2026.4.22` |\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| [cryptography](https://github.com/pyca/cryptography) | `46.0.7` | `47.0.0` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.28.0` | `3.29.0` |\n| [fonttools](https://github.com/fonttools/fonttools) | `4.61.1` | `4.62.1` |\n| [gitpython](https://github.com/gitpython-developers/GitPython) | `3.1.46` | `3.1.49` |\n| [groq](https://github.com/groq/groq-python) | `0.37.1` | `1.2.0` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.13` |\n| [ipython](https://github.com/ipython/ipython) | `9.10.0` | `9.13.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.2` | `0.20.0` |\n| [json5](https://github.com/dpranke/pyjson5) | `0.13.0` | `0.14.0` |\n| [jsonpointer](https://github.com/stefankoegl/python-json-pointer) | `3.0.0` | `3.1.1` |\n| [jupyter-events](https://github.com/jupyter/jupyter_events) | `0.12.0` | `0.12.1` |\n| [jupyter-lsp](https://github.com/jupyter-lsp/jupyterlab-lsp) | `2.3.0` | `2.3.1` |\n| [jupyterlab](https://github.com/jupyterlab/jupyterlab) | `4.5.4` | `4.5.7` |\n| [kiwisolver](https://github.com/nucleic/kiwi) | `1.4.9` | `1.5.0` |\n| [langchain](https://github.com/langchain-ai/langchain) | `1.2.15` | `1.2.17` |\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.10` |\n| [langgraph-checkpoint](https://github.com/langchain-ai/langgraph) | `4.0.2` | `4.0.3` |\n| [langgraph-prebuilt](https://github.com/langchain-ai/langgraph) | `1.0.10` | `1.0.13` |\n| [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.7.32` | `0.8.0` |\n| [llvmlite](https://github.com/numba/llvmlite) | `0.46.0b1` | `0.47.0` |\n| [mako](https://github.com/sqlalchemy/mako) | `1.3.10` | `1.3.12` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `2.1.5` | `3.0.3` |\n| [matplotlib](https://github.com/matplotlib/matplotlib) | `3.10.8` | `3.10.9` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.16.0` | `2.20.0` |\n| [nbconvert](https://github.com/jupyter/nbconvert) | `7.17.0` | `7.17.1` |\n| [notebook](https://github.com/jupyter/notebook) | `7.5.3` | `7.5.6` |\n| [numba](https://github.com/numba/numba) | `0.63.0b1` | `0.65.1` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.2` | `2.4.4` |\n| [optuna](https://github.com/optuna/optuna) | `4.7.0` | `4.8.0` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.2` |\n| [pandas](https://github.com/pandas-dev/pandas) | `2.3.3` | `3.0.2` |\n| [parso](https://github.com/davidhalter/parso) | `0.8.6` | `0.8.7` |\n| [pdfminer-six](https://github.com/pdfminer/pdfminer.six) | `20251230` | `20260107` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.1.1` | `12.2.0` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.5.1` | `4.9.6` |\n| [plotly](https://github.com/plotly/plotly.py) | `5.18.0` | `6.7.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.5.1` | `4.6.0` |\n| [prometheus-client](https://github.com/prometheus/client_python) | `0.24.1` | `0.25.0` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.5` | `7.34.1` |\n| [pyarrow](https://github.com/apache/arrow) | `23.0.0` | `24.0.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.2` | `2.13.3` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.46.3` |\n| [pydeck](https://github.com/visgl/deck.gl) | `0.9.1` | `0.9.2` |\n| [pygments](https://github.com/pygments/pygments) | `2.19.2` | `2.20.0` |\n| [pypdfium2](https://github.com/pypdfium2-team/pypdfium2) | `5.7.0` | `5.7.1` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [pytz](https://github.com/stub42/pytz) | `2025.2` | `2026.1.post1` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.11` | `0.15.12` |\n| [scipy](https://github.com/scipy/scipy) | `1.17.0` | `1.17.1` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.0` | `82.0.1` |\n| [shap](https://github.com/shap/shap) | `0.50.0` | `0.51.0` |\n| [smmap](https://github.com/gitpython-developers/smmap) | `5.0.2` | `5.0.3` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.47` | `2.0.49` |\n| [streamlit](https://github.com/streamlit/streamlit) | `1.54.0` | `1.57.0` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [tornado](https://github.com/tornadoweb/tornado) | `6.5.4` | `6.5.5` |\n| [traitlets](https://github.com/ipython/traitlets) | `5.14` | `5.14.3` |\n| [tzdata](https://github.com/python/tzdata) | `2025.3` | `2026.2` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `21.2.4` | `21.3.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.6.0` | `0.7.0` |\n| [xgboost](https://github.com/dmlc/xgboost) | `2.1.4` | `3.2.0` |\n| [xxhash](https://github.com/ifduyue/python-xxhash) | `3.6.0` | `3.7.0` |\n\n\nUpdates `altair` from 6.0.0 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/vega/altair/releases\"\u003ealtair's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThere are many exciting improvements in this release! Read on for details and a big thanks to everyone who contributed  :tada:\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efeat: Update to Vega-Lite 6.4.1 by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4005\"\u003evega/altair#4005\u003c/a\u003e. See \u003ca href=\"https://github.com/vega/vega-lite/releases\"\u003ethe Vega-Lite Release Notes\u003c/a\u003e for details; a few highlights:\n\u003cul\u003e\n\u003cli\u003eNewlines are now supported in tooltips.\u003c/li\u003e\n\u003cli\u003eThe default stack order of marks like bars and areas is now aligned with the color domain.\u003c/li\u003e\n\u003cli\u003eInteractive charts automatically change the cursor to pointer to indicate they can be interacted with.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003efeat: auto hoist facet encodings in layer by \u003ca href=\"https://github.com/thomascamminady\"\u003e\u003ccode\u003e@​thomascamminady\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3965\"\u003evega/altair#3965\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eThis allows layering of simple faceted charts that define the same facet variables, instead of requiring that layering happens before faceting.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003efeat: Accept ZoneInfo(key='UTC') by \u003ca href=\"https://github.com/JackKelly\"\u003e\u003ccode\u003e@​JackKelly\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3944\"\u003evega/altair#3944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add pandas 3 compatibility and fix CI (drop Python 3.9, pin polars \u0026lt;1.38) by \u003ca href=\"https://github.com/mattijn\"\u003e\u003ccode\u003e@​mattijn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3950\"\u003evega/altair#3950\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add ensure_ascii option to to_json() with default False by \u003ca href=\"https://github.com/RamiNoodle733\"\u003e\u003ccode\u003e@​RamiNoodle733\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3952\"\u003evega/altair#3952\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efix: unique view names per concat cell and correct param.views by \u003ca href=\"https://github.com/mattijn\"\u003e\u003ccode\u003e@​mattijn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3974\"\u003evega/altair#3974\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: Compute unique hashes for identical specs that use different data by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3982\"\u003evega/altair#3982\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: preserve polars datetime timezones during serialization by \u003ca href=\"https://github.com/kjgoodrick\"\u003e\u003ccode\u003e@​kjgoodrick\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3922\"\u003evega/altair#3922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: type issues with Chart save methods. by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3934\"\u003evega/altair#3934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: type issues with Chart mark methods. by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3936\"\u003evega/altair#3936\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: improve api.py typing by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3955\"\u003evega/altair#3955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: typing issues for mypy 1.18 and above. by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3966\"\u003evega/altair#3966\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edocs: Highlight new examples in the gallery by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3999\"\u003evega/altair#3999\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eIt's now easier to find which examples have been \u003ca href=\"https://altair-viz.github.io/gallery/index.html\"\u003erecently added to the Altair gallery\u003c/a\u003e and the page looks more visually appealing overall.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003edocs: add WASM / Pyodide installation instructions by \u003ca href=\"https://github.com/ArnavTomar18\"\u003e\u003ccode\u003e@​ArnavTomar18\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3932\"\u003evega/altair#3932\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Correct some grammar issues by \u003ca href=\"https://github.com/star1327p\"\u003e\u003ccode\u003e@​star1327p\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3942\"\u003evega/altair#3942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add identity line (x=y diagonal) example to rule mark docs by \u003ca href=\"https://github.com/stbiadmin\"\u003e\u003ccode\u003e@​stbiadmin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3969\"\u003evega/altair#3969\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Correct tooltip field for faceted choropleth example by \u003ca href=\"https://github.com/Sparlitu\"\u003e\u003ccode\u003e@​Sparlitu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3920\"\u003evega/altair#3920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: wrong tooltip variable id -\u0026gt; county_id by \u003ca href=\"https://github.com/thomascamminady\"\u003e\u003ccode\u003e@​thomascamminady\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3924\"\u003evega/altair#3924\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: a HConcatChart -\u0026gt; an HConcatChart by \u003ca href=\"https://github.com/star1327p\"\u003e\u003ccode\u003e@​star1327p\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3917\"\u003evega/altair#3917\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Substitute field strings correctly so that points in theme display chart show up by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3984\"\u003evega/altair#3984\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Change the lead size to fit on two rows by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3980\"\u003evega/altair#3980\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Make the first page title fit on one row by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3979\"\u003evega/altair#3979\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix broken density example by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3985\"\u003evega/altair#3985\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Simplify inline expr syntax by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3996\"\u003evega/altair#3996\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebuild: Speed up doc build time for faster local development by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3997\"\u003evega/altair#3997\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: Add watch option to automatically rebuild docs upon detected changes by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3998\"\u003evega/altair#3998\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: Create docs CLI to facilitate different build combinations by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4000\"\u003evega/altair#4000\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump dev version to 6.1.0dev by \u003ca href=\"https://github.com/mattijn\"\u003e\u003ccode\u003e@​mattijn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3913\"\u003evega/altair#3913\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estyle: Make chained chart methods work with type checkers other than pyright by \u003ca href=\"https://github.com/hamdanal\"\u003e\u003ccode\u003e@​hamdanal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3933\"\u003evega/altair#3933\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: bump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3928\"\u003evega/altair#3928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump urllib3 from 2.5.0 to 2.6.3 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3939\"\u003evega/altair#3939\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/af1450f413fd046da032857519bba536dad97910\"\u003e\u003ccode\u003eaf1450f\u003c/code\u003e\u003c/a\u003e chore: 🔧 Bump versions for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/af071276321b64a8ea66a773dbc60d659dd41fa1\"\u003e\u003ccode\u003eaf07127\u003c/code\u003e\u003c/a\u003e feat: Update to Vega-Lite 6.4.1 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4005\"\u003e#4005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/e093674705eebaab23887318e190b0cc0977cc21\"\u003e\u003ccode\u003ee093674\u003c/code\u003e\u003c/a\u003e harden prerelease workflow (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4008\"\u003e#4008\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/942dead2972aee5efde8f1488b06c0a8fba58b26\"\u003e\u003ccode\u003e942dead\u003c/code\u003e\u003c/a\u003e build(deps): bump uv from 0.10.4 to 0.11.6 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4004\"\u003e#4004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/127f79f7b456450729914950ec2a063c02699b9c\"\u003e\u003ccode\u003e127f79f\u003c/code\u003e\u003c/a\u003e docs: Highlight new examples in the gallery (\u003ca href=\"https://redirect.github.com/vega/altair/issues/3999\"\u003e#3999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/59561f8fee41d0d1d872f9dba855cc36651c869e\"\u003e\u003ccode\u003e59561f8\u003c/code\u003e\u003c/a\u003e fix: Compute unique hashes for identical specs that use different data (\u003ca href=\"https://redirect.github.com/vega/altair/issues/3982\"\u003e#3982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/60a3fb7da35b5f4b9c715b85e6a81c0154df7cc9\"\u003e\u003ccode\u003e60a3fb7\u003c/code\u003e\u003c/a\u003e build(deps): bump tornado from 6.5.4 to 6.5.5 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/3978\"\u003e#3978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/33bc6379e7c0e38f92a04a84ed52d39c02fb3f38\"\u003e\u003ccode\u003e33bc637\u003c/code\u003e\u003c/a\u003e build(deps): bump cryptography from 46.0.6 to 46.0.7 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4003\"\u003e#4003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/88c446951eb48c13c8078a392f4d79e8b63453d2\"\u003e\u003ccode\u003e88c4469\u003c/code\u003e\u003c/a\u003e docs: Create docs CLI to facilitate different build combinations (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4000\"\u003e#4000\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/a4a20ccc898c487fe80e3c7118bafb58872df113\"\u003e\u003ccode\u003ea4a20cc\u003c/code\u003e\u003c/a\u003e docs: Add watch option to automatically rebuild docs upon detected changes (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/vega/altair/compare/v6.0.0...v6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.12.1 to 4.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9\u003c/li\u003e\n\u003cli\u003eAdded a \u003ccode\u003ettl\u003c/code\u003e parameter to the \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e wrapper (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1073\"\u003e#1073\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWidened the type annotations of file I/O streams to accept \u003ccode\u003eIO[bytes]\u003c/code\u003e instead of just \u003ccode\u003eBinaryIO\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1078\"\u003e#1078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.Path\u003c/code\u003e not being compatible with Python 3.15 due to the removal of \u003ccode\u003epathlib.Path.is_reserved()\u003c/code\u003e and the addition of \u003ccode\u003epathlib.Path.__vfspath__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1061\"\u003e#1061\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eBrokenResourceError\u003c/code\u003e raised by the asyncio \u003ccode\u003eSocketStream\u003c/code\u003e not having the original exception as its cause (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1055\"\u003e#1055\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eTypeError\u003c/code\u003e raised when using \u0026quot;func\u0026quot; as a parameter name in \u003ccode\u003epytest.mark.parametrize\u003c/code\u003e when using the pytest plugin (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1068\"\u003e#1068\u003c/a\u003e; PR by \u003ca href=\"https://github.com/JohnnyDeuss\"\u003e\u003ccode\u003e@​JohnnyDeuss\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the pytest plugin not running tests that had the \u003ccode\u003eanyio\u003c/code\u003e marker added programmatically via \u003ccode\u003epytest_collection_modifyitems\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/422\"\u003e#422\u003c/a\u003e; PR by \u003ca href=\"https://github.com/chbndrhnns\"\u003e\u003ccode\u003e@​chbndrhnns\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when they are contained in an exception group alongside non-cancellation exceptions (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1091\"\u003e#1091\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCondition.wait()\u003c/code\u003e not passing on a notification when the task is cancelled but already received a notification\u003c/li\u003e\n\u003cli\u003eFixed inverted condition in the process pool shutdown phase which would cause still-running pooled processes not to be terminated (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1074\"\u003e#1074\u003c/a\u003e; PR by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/afbe93ca9d0c447adf26e9c1715ac20870622bf2\"\u003e\u003ccode\u003eafbe93c\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/33bdf2e4b4f40c2df178123746147a6d2471808d\"\u003e\u003ccode\u003e33bdf2e\u003c/code\u003e\u003c/a\u003e Rearranged the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/19e09e25bc5a23dd78a577d8c3909dd377057c78\"\u003e\u003ccode\u003e19e09e2\u003c/code\u003e\u003c/a\u003e Fixed inverted condition in _forcibly_shutdown_process_pool_on_exit (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1074\"\u003e#1074\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9369d80b9e8292f2a892a9d5c73923c6a28aa08c\"\u003e\u003ccode\u003e9369d80\u003c/code\u003e\u003c/a\u003e Fixed Condition.wait() not handing over notification when cancelled\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f122abdc6f6b166c6b6ac27d36d55cdf8fa08e8\"\u003e\u003ccode\u003e6f122ab\u003c/code\u003e\u003c/a\u003e Fixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/beaa45aff568a4020f2faf317321dd92f0e1f4a0\"\u003e\u003ccode\u003ebeaa45a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1097\"\u003e#1097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/602f6606dcf3f37702686a4f3e161328c537b07f\"\u003e\u003ccode\u003e602f660\u003c/code\u003e\u003c/a\u003e Widened type annotations to accept IO[bytes] in file streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b5dcd45170701a756ba634197398f05d4710cab3\"\u003e\u003ccode\u003eb5dcd45\u003c/code\u003e\u003c/a\u003e Added note about erasing the template\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d68670b3b4e0917d4caff2de082e03220f3e05a1\"\u003e\u003ccode\u003ed68670b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1090\"\u003e#1090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/fc17a22dd948e6a3d90d99908813f0010dfc3d2c\"\u003e\u003ccode\u003efc17a22\u003c/code\u003e\u003c/a\u003e tweak to_thread docs about abandon_on_cancel (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1088\"\u003e#1088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.12.1...4.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `async-lru` from 2.1.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/aio-libs/async-lru/releases\"\u003easync-lru's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.3.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003ecache_contains()\u003c/code\u003e for read-only key lookup.\u003c/li\u003e\n\u003cli\u003eChanged cross-loop cache access to auto-reset and rebind to the current event loop.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003eAlruCacheLoopResetWarning\u003c/code\u003e when an auto-reset happens due to event loop change.\u003c/li\u003e\n\u003cli\u003eForwarded \u003ccode\u003ecache_close(wait=...)\u003c/code\u003e for bound methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a \u003ccode\u003ejitter\u003c/code\u003e parameter to randomise TTL.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eRuntimeError\u003c/code\u003e when cache is used by different loop.\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/aio-libs/async-lru/blob/master/CHANGES.rst\"\u003easync-lru's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.3.0 (2026-03-18)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003ecache_contains()\u003c/code\u003e for read-only key lookup.\u003c/li\u003e\n\u003cli\u003eChanged cross-loop cache access to auto-reset and rebind to the current event loop.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003eAlruCacheLoopResetWarning\u003c/code\u003e when an auto-reset happens due to event loop change.\u003c/li\u003e\n\u003cli\u003eForwarded \u003ccode\u003ecache_close(wait=...)\u003c/code\u003e for bound methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e2.2.0 (2026-02-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a \u003ccode\u003ejitter\u003c/code\u003e parameter to randomise TTL.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eRuntimeError\u003c/code\u003e when cache is used by different loop.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/cb9e034619167668af09c7be71a37e2d40a96995\"\u003e\u003ccode\u003ecb9e034\u003c/code\u003e\u003c/a\u003e Release v2.3.0 (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/748\"\u003e#748\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/a2aa7b05ce9b773539f1c479341ac1c53f1fe9d0\"\u003e\u003ccode\u003ea2aa7b0\u003c/code\u003e\u003c/a\u003e build(deps): bump coverage from 7.13.4 to 7.13.5 (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/747\"\u003e#747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/63760a481d44d5a2cc0d1325fc2ca233b664367a\"\u003e\u003ccode\u003e63760a4\u003c/code\u003e\u003c/a\u003e feat: add cache_contains() for read-only key lookup (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/746\"\u003e#746\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/e2ddf7af72e2eb7382182dbdde7578142f0124be\"\u003e\u003ccode\u003ee2ddf7a\u003c/code\u003e\u003c/a\u003e Forward cache_close(wait=...) for bound methods (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/745\"\u003e#745\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/33e1a7cec396bcf612f46226253775fd905b40eb\"\u003e\u003ccode\u003e33e1a7c\u003c/code\u003e\u003c/a\u003e Emit AlruCacheLoopResetWarning on event loop auto-reset (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/744\"\u003e#744\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/fff4d49334839987946c74bfc02c05f79427e8b2\"\u003e\u003ccode\u003efff4d49\u003c/code\u003e\u003c/a\u003e feat: Allow \u003ccode\u003ealru_cache\u003c/code\u003e to automatically clear and rebind to the current eve...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/7ef00b766b35da224a5e652f344e3788663a6f5a\"\u003e\u003ccode\u003e7ef00b7\u003c/code\u003e\u003c/a\u003e Release v2.2.0 (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/01db639c22c8c18ad41a026dacf301722deb3a32\"\u003e\u003ccode\u003e01db639\u003c/code\u003e\u003c/a\u003e fix: avoid binding loop for invalid cache keys (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/740\"\u003e#740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/c6acbe807f69324b66c6e3327d6ace5ecea02da4\"\u003e\u003ccode\u003ec6acbe8\u003c/code\u003e\u003c/a\u003e build(deps): bump pytest-codspeed from 4.2.0 to 4.3.0 (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/738\"\u003e#738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/8783cf7a12ceef22eefd028bb6d7ad096a977b47\"\u003e\u003ccode\u003e8783cf7\u003c/code\u003e\u003c/a\u003e build(deps): bump coverage from 7.13.3 to 7.13.4 (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/737\"\u003e#737\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/aio-libs/async-lru/compare/v2.1.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `attrs` from 25.4.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-attrs/attrs/releases\"\u003eattrs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.1.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main outward change here only affects people using field transformers, but it should be a nice quality of life improvement!\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://kraken.tech\"\u003eKraken Tech\u003c/a\u003e (@\u003ca href=\"https://github.com/kraken-tech\"\u003ekraken-tech\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://ecosyste.ms\"\u003eEcosystems\u003c/a\u003e (@\u003ca href=\"https://github.com/ecosyste-ms\"\u003eecosyste-ms\u003c/a\u003e), \u003ca href=\"https://www.lambdatest.com\"\u003eTestMu AI Open Source Office (Formerly LambdaTest)\u003c/a\u003e (@\u003ca href=\"https://github.com/LambdaTest-Inc\"\u003eLambdaTest-Inc\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://miketheman.dev\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://bmdphd.info/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Celebrity News AG (@\u003ca href=\"https://github.com/celebritynewsag\"\u003ecelebritynewsag\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eBackwards-incompatible Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eField aliases are now resolved \u003cem\u003ebefore\u003c/em\u003e calling \u003ccode\u003efield_transformer\u003c/code\u003e, so transformers receive fully populated \u003ccode\u003eAttribute\u003c/code\u003e objects with usable \u003ccode\u003ealias\u003c/code\u003e values instead of \u003ccode\u003eNone\u003c/code\u003e. The new \u003ccode\u003eAttribute.alias_is_default\u003c/code\u003e flag indicates whether the alias was auto-generated (\u003ccode\u003eTrue\u003c/code\u003e) or explicitly set by the user (\u003ccode\u003eFalse\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1509\"\u003e#1509\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanges\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix type annotations for \u003ccode\u003eattrs.validators.optional()\u003c/code\u003e, so it no longer rejects tuples with more than one validator. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1496\"\u003e#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003eattrs.validators.disabled()\u003c/code\u003e contextmanager can now be nested. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1513\"\u003e#1513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFrozen classes can set \u003ccode\u003eon_setattr=attrs.setters.NO_OP\u003c/code\u003e in addition to \u003ccode\u003eNone\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1515\"\u003e#1515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIt's now possible to pass \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003einstances\u003c/strong\u003e in addition to \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003eclasses\u003c/strong\u003e to \u003ccode\u003eattrs.fields()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1529\"\u003e#1529\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/DavidCEllis\"\u003e\u003ccode\u003e@​DavidCEllis\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/finite-state-machine\"\u003e\u003ccode\u003e@​finite-state-machine\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/vstinner\"\u003e\u003ccode\u003e@​vstinner\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/attrs\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner python-attrs attrs-26.1.0.tar.gz\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-attrs/attrs/blob/main/CHANGELOG.md\"\u003eattrs's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/python-attrs/attrs/tree/26.1.0\"\u003e26.1.0\u003c/a\u003e - 2026-03-19\u003c/h2\u003e\n\u003ch3\u003eBackwards-incompatible Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eField aliases are now resolved \u003cem\u003ebefore\u003c/em\u003e calling \u003ccode\u003efield_transformer\u003c/code\u003e, so transformers receive fully populated \u003ccode\u003eAttribute\u003c/code\u003e objects with usable \u003ccode\u003ealias\u003c/code\u003e values instead of \u003ccode\u003eNone\u003c/code\u003e.\nThe new \u003ccode\u003eAttribute.alias_is_default\u003c/code\u003e flag indicates whether the alias was auto-generated (\u003ccode\u003eTrue\u003c/code\u003e) or explicitly set by the user (\u003ccode\u003eFalse\u003c/code\u003e).\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1509\"\u003e#1509\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanges\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix type annotations for \u003ccode\u003eattrs.validators.optional()\u003c/code\u003e, so it no longer rejects tuples with more than one validator.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1496\"\u003e#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003eattrs.validators.disabled()\u003c/code\u003e contextmanager can now be nested.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1513\"\u003e#1513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFrozen classes can set \u003ccode\u003eon_setattr=attrs.setters.NO_OP\u003c/code\u003e in addition to \u003ccode\u003eNone\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1515\"\u003e#1515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIt's now possible to pass \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003einstances\u003c/strong\u003e in addition to \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003eclasses\u003c/strong\u003e to \u003ccode\u003eattrs.fields()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1529\"\u003e#1529\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/7bfc49e9b22d5ba25b6e429524c3d49fee27cb36\"\u003e\u003ccode\u003e7bfc49e\u003c/code\u003e\u003c/a\u003e Prepare 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/31e02869da10824b492c378c1dc87ccc720ee5ad\"\u003e\u003ccode\u003e31e0286\u003c/code\u003e\u003c/a\u003e Update test_validators.py for Python 3.15a7 (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1530\"\u003e#1530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/48b8611c27779811d161200e17de8da24aae7feb\"\u003e\u003ccode\u003e48b8611\u003c/code\u003e\u003c/a\u003e Add instance support to attrs.fields() (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1529\"\u003e#1529\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/3a68d4913221abc6f8ad3be50937f7ae49300a98\"\u003e\u003ccode\u003e3a68d49\u003c/code\u003e\u003c/a\u003e dev: document missing git tags failure mode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/a572c3a4c558a8b9b48cf989fcd956ab1a279439\"\u003e\u003ccode\u003ea572c3a\u003c/code\u003e\u003c/a\u003e Allow field(on_setattr=NO_OP) on frozen classes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/af9c510912ce604a94896cc35c27368d5baf6ae6\"\u003e\u003ccode\u003eaf9c510\u003c/code\u003e\u003c/a\u003e Fix validators.disabled() to save/restore state on nesting (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1513\"\u003e#1513\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/ab7f8b2f4c0f747d5b1575247ce35e5adaad182e\"\u003e\u003ccode\u003eab7f8b2\u003c/code\u003e\u003c/a\u003e update dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/ce89f5d11feb0805da9ed10bb165238cc959f1bb\"\u003e\u003ccode\u003ece89f5d\u003c/code\u003e\u003c/a\u003e Fix message passing in frozen errors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/eccd966d80aff5196efc959316961cfa780439f9\"\u003e\u003ccode\u003eeccd966\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eoptional\u003c/code\u003e validator to accept tuples of len \u0026gt; 1 (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1496\"\u003e#1496\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/e92fe52dfe1eb07167e6473724c5a8ada978add0\"\u003e\u003ccode\u003ee92fe52\u003c/code\u003e\u003c/a\u003e policies: tighten screws (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1528\"\u003e#1528\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-attrs/attrs/compare/25.4.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cachetools` from 6.2.6 to 7.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst\"\u003ecachetools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev7.1.0 (2026-05-01)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd type stubs based on the work of the good people at \u003ccode\u003etypeshed \u0026lt;https://github.com/python/typeshed/tree/main/stubs/cachetools/\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate unit tests.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.6 (2026-04-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eMinor code improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate project URLs.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate CI environment.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.5 (2026-03-09)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMinor \u003ccode\u003e@cachedmethod\u003c/code\u003e performance improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.4 (2026-03-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix and properly document \u003ccode\u003e@cachedmethod.cache_key\u003c/code\u003e behavior.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMinor documentation improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.3 (2026-03-05)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eDeprecationWarning\u003c/code\u003e when creating an autospec mock with\n\u003ccode\u003e@cachedmethod\u003c/code\u003e decorations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.2 (2026-03-02)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eProvide more efficient \u003ccode\u003eclear()\u003c/code\u003e implementation for all support\nCache classes (courtesy Josep Pon Farreny).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.1 (2026-02-10)\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/tkem/cachetools/commit/1ea3422e058ef8b6b7dc15beb9d44d8f7c195a62\"\u003e\u003ccode\u003e1ea3422\u003c/code\u003e\u003c/a\u003e Bump release date.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/d9874465a6ab6f9d1d56cef91370f9c237a7eca6\"\u003e\u003ccode\u003ed987446\u003c/code\u003e\u003c/a\u003e Release v7.1.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/3d79e80a4a54892d1552cd17da8e27920c1918d8\"\u003e\u003ccode\u003e3d79e80\u003c/code\u003e\u003c/a\u003e Update Copilot Instructions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/83fe6bc78d0155a0036dda8a8eb1a2ddb8f26c60\"\u003e\u003ccode\u003e83fe6bc\u003c/code\u003e\u003c/a\u003e Add tox pyright check.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/bd3fbc49212eb948e08e9c478e5901f1293fd1f4\"\u003e\u003ccode\u003ebd3fbc4\u003c/code\u003e\u003c/a\u003e Improve typing support.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/09dd6fec4b1b2339451ab26d1ca3c7a049b8c38c\"\u003e\u003ccode\u003e09dd6fe\u003c/code\u003e\u003c/a\u003e Improve original type stubs from typeshed.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/873c7013ea92b16f2f24a6001e625fabfdf951a5\"\u003e\u003ccode\u003e873c701\u003c/code\u003e\u003c/a\u003e Add typeshed typings.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/28d4506f2a49d781ffbcecb095fa7aba5bb80aff\"\u003e\u003ccode\u003e28d4506\u003c/code\u003e\u003c/a\u003e Release v7.0.6.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/51921a4812b3304be9625ed004f024935a8036af\"\u003e\u003ccode\u003e51921a4\u003c/code\u003e\u003c/a\u003e Remove _TimedCache default timer to simplify type stubs.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/a4249f6aa3b4cb2fe287b08631c308bb88b9396c\"\u003e\u003ccode\u003ea4249f6\u003c/code\u003e\u003c/a\u003e Bump codecov/codecov-action from 5.5.2 to 6.0.0 (\u003ca href=\"https://redirect.github.com/tkem/cachetools/issues/392\"\u003e#392\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tkem/cachetools/compare/v6.2.6...v7.1.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.1.4 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\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/8571a4ba5205675107f9026d0008ad2d7a2778bf\"\u003e\u003ccode\u003e8571a4b\u003c/code\u003e\u003c/a\u003e 2026.02.25 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/395\"\u003e#395\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6f7de00579d292af565bbb8a947643219794eb6d\"\u003e\u003ccode\u003e6f7de00\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.0.0 to 8.1.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/390\"\u003e#390\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/a1de59b15105cad768afed4f066b36171134f04a\"\u003e\u003ccode\u003ea1de59b\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.1 to 6.0.2 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/391\"\u003e#391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.01.04...2026.04.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.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 `cryptography` from 46.0.7 to 47.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e47.0.0 - 2026-04-24\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for Python 3.8 is deprecated and will be removed in the next\n  ``cryptography`` release.\n* **BACKWARDS INCOMPATIBLE:** Support for binary elliptic curves\n  (``SECT*`` classes) has been removed. These curves are rarely used and\n  have additional security considerations that make them undesirable.\n* **BACKWARDS INCOMPATIBLE:** Support for OpenSSL 1.1.x has been removed.\n  OpenSSL 3.0.0 or later is now required. LibreSSL, BoringSSL, and AWS-LC\n  continue to be supported.\n* **BACKWARDS INCOMPATIBLE:** Dropped support for LibreSSL \u0026lt; 4.1.\n* **BACKWARDS INCOMPATIBLE:** Loading keys with unsupported algorithms or\n  keys with unsupported explicit curve encodings now raises\n  :class:`~cryptography.exceptions.UnsupportedAlgorithm` instead of\n  ``ValueError``. This change affects\n  :func:`~cryptography.hazmat.primitives.serialization.load_pem_private_key`,\n  :func:`~cryptography.hazmat.primitives.serialization.load_der_private_key`,\n  :func:`~cryptography.hazmat.primitives.serialization.load_pem_public_key`,\n  :func:`~cryptography.hazmat.primitives.serialization.load_der_public_key`,\n  and :meth:`~cryptography.x509.Certificate.public_key` when called on\n  certificates with unsupported public key algorithms.\n* **BACKWARDS INCOMPATIBLE:** When parsing elliptic curve private keys, we now\n  reject keys that incorrectly encode a private key of the wrong length because\n  such keys are impossible to process in a constant-time manner. We do not\n  believe keys with this problem are in wide use, however we may revert this\n  change based on the feedback we receive.\n* Deprecated passing 64-bit (8-byte) and 128-bit (16-byte) keys to\n  :class:`~cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES`. In a\n  future release, only 192-bit (24-byte) keys will be accepted. Users should\n  expand shorter keys themselves (e.g., for single DES: ``key + key + key``,\n  for two-key: ``key + key[:8]``).\n* Updated the minimum supported Rust version (MSRV) to 1.83.0, from 1.74.0.\n* Support for ``x86_64`` macOS (including publishing wheels) is deprecated\n  and will be removed in the next release. We will switch to publishing an\n  ``arm64`` only wheel for macOS.\n* Support for 32-bit Windows (including publishing wheels) is deprecated\n  and will be removed in the next release. Users should move to a 64-bit\n  Python installation.\n* ``public_bytes`` and ``private_bytes`` methods on keys now raise\n  ``TypeError`` (instead of ``ValueError``) if an invalid encoding is provided\n  for the given ``format``.\n* Moved :class:`~cryptography.hazmat.decrepit.ciphers.modes.CFB`,\n  :cla...\n\n_Description has been truncated_","html_url":"https://github.com/SatyamKumarCS/Default-Credit-Card-Prediction/pull/7","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/SatyamKumarCS%2FDefault-Credit-Card-Prediction/issues/7","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/7/packages"},{"uuid":"4369014345","node_id":"PR_kwDOPiIgt87XpOQJ","number":205,"state":"open","title":"deps(deps): update python-json-logger requirement from \u003e=2.0.7 to \u003e=4.1.0 in /backend","user":"dependabot[bot]","labels":[],"assignees":["drsapaev"],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-02T13:29:25.000Z","updated_at":"2026-05-02T13:32:14.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(deps): update","packages":[{"name":"python-json-logger","old_version":"\u003e=2.0.7","new_version":"\u003e=4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":"/backend","ecosystem":"pip"},"body":"Updates the requirements on [python-json-logger](https://github.com/nhairs/python-json-logger) 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/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.0...v3.2.1\"\u003e3.2.1\u003c/a\u003e - 2024-12-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImport error on \u003ccode\u003eimport pythonjsonlogger.jsonlogger\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/29\"\u003e#29\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/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v2.0.7...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore 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/drsapaev/final/pull/205","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/drsapaev%2Ffinal/issues/205","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/205/packages"},{"uuid":"4331979472","node_id":"PR_kwDOMt9I9c7VxRRl","number":130,"state":"closed","title":"[pip] (deps): Bump the dev-dependencies group across 1 directory with 17 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-10T21:04:32.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-26T21:05:13.000Z","updated_at":"2026-05-10T21:04:34.000Z","time_to_close":1209559,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"[pip] (deps): Bump","group_name":"dev-dependencies","update_count":17,"packages":[{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"charset-normalizer","old_version":"3.4.6","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"pychoir","old_version":"0.0.29","new_version":"0.0.30","repository_url":"https://github.com/kajaste/pychoir"},{"name":"requests","old_version":"2.33.0","new_version":"2.33.1","repository_url":"https://github.com/psf/requests"},{"name":"filelock","old_version":"3.25.2","new_version":"3.29.0","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"identify","old_version":"2.6.18","new_version":"2.6.19","repository_url":"https://github.com/pre-commit/identify"},{"name":"packaging","old_version":"26.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"platformdirs","old_version":"4.9.4","new_version":"4.9.6","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"pre-commit","old_version":"4.5.1","new_version":"4.6.0","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pygments","old_version":"2.19.2","new_version":"2.20.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pyright","old_version":"1.1.408","new_version":"1.1.409","repository_url":"https://github.com/RobertCraigie/pyright-python"},{"name":"pytest","old_version":"9.0.2","new_version":"9.0.3","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-randomly","old_version":"4.0.1","new_version":"4.1.0","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"ruff","old_version":"0.15.7","new_version":"0.15.12","repository_url":"https://github.com/astral-sh/ruff"},{"name":"virtualenv","old_version":"21.2.0","new_version":"21.2.4","repository_url":"https://github.com/pypa/virtualenv"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dev-dependencies group with 17 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.4.22` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.6` | `3.4.7` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.13` |\n| [pychoir](https://github.com/kajaste/pychoir) | `0.0.29` | `0.0.30` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.33.1` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.25.2` | `3.29.0` |\n| [identify](https://github.com/pre-commit/identify) | `2.6.18` | `2.6.19` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.2` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.4` | `4.9.6` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.5.1` | `4.6.0` |\n| [pygments](https://github.com/pygments/pygments) | `2.19.2` | `2.20.0` |\n| [pyright](https://github.com/RobertCraigie/pyright-python) | `1.1.408` | `1.1.409` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.2` | `9.0.3` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `4.0.1` | `4.1.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.7` | `0.15.12` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `21.2.0` | `21.2.4` |\n\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.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 `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 `pychoir` from 0.0.29 to 0.0.30\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kajaste/pychoir/releases\"\u003epychoir's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eThirtieth release\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.14\u003c/li\u003e\n\u003cli\u003eDev deps update\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kajaste/pychoir/commit/99ff3e53501eec9926d2983ef235df19b198fa18\"\u003e\u003ccode\u003e99ff3e5\u003c/code\u003e\u003c/a\u003e Upgrade dev deps\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kajaste/pychoir/commit/33c9ef8a18903498945e83df576e768af1a7bc3a\"\u003e\u003ccode\u003e33c9ef8\u003c/code\u003e\u003c/a\u003e Python 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kajaste/pychoir/commit/1089c0a6ec678127d9df24459868363002f8b77a\"\u003e\u003ccode\u003e1089c0a\u003c/code\u003e\u003c/a\u003e Automatic package versioning from tag\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/kajaste/pychoir/compare/v0.0.29...v0.0.30\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.0 to 2.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\u003c/blockquote\u003e\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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.0...v2.33.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.25.2 to 3.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.29.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(async): use single-thread executor for lock consistency by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/533\"\u003etox-dev/filelock#533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(soft): enable stale lock detection on Windows by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/534\"\u003etox-dev/filelock#534\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.28.0...3.29.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.28.0...3.29.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.28.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): unbreak release workflow, publish to PyPI again by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/529\"\u003etox-dev/filelock#529\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.27.0...3.28.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.27.0...3.28.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.27.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(rw): add SoftReadWriteLock for NFS and HPC clusters by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/528\"\u003etox-dev/filelock#528\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.26.1...3.27.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.26.1...3.27.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.26.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(asyncio): add \u003cstrong\u003eexit\u003c/strong\u003e to BaseAsyncFileLock and fix \u003cstrong\u003edel\u003c/strong\u003e loop handling by \u003ca href=\"https://github.com/naarob\"\u003e\u003ccode\u003e@​naarob\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/518\"\u003etox-dev/filelock#518\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/naarob\"\u003e\u003ccode\u003e@​naarob\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/518\"\u003etox-dev/filelock#518\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.26.0...3.26.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.26.0...3.26.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.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🔒 ci(workflows): add zizmor security auditing by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/517\"\u003etox-dev/filelock#517\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 fix(ci): restore git credentials for release job by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/520\"\u003etox-dev/filelock#520\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(soft): add PID inspection and lock breaking by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/524\"\u003etox-dev/filelock#524\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.25.2...3.26.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.25.2...3.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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.0 (2026-04-19)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(soft): enable stale lock detection on Windows :pr:\u003ccode\u003e534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(async): use single-thread executor for lock consistency :pr:\u003ccode\u003e533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 :pr:\u003ccode\u003e530\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.28.0 (2026-04-14)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): unbreak release workflow, publish to PyPI again :pr:\u003ccode\u003e529\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.26.1 (2026-04-09)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(asyncio): add \u003cstrong\u003eexit\u003c/strong\u003e to BaseAsyncFileLock and fix \u003cstrong\u003edel\u003c/strong\u003e loop handling :pr:\u003ccode\u003e518\u003c/code\u003e - by :user:\u003ccode\u003enaarob\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 :pr:\u003ccode\u003e525\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.26.0 (2026-04-06)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(soft): add PID inspection and lock breaking :pr:\u003ccode\u003e524\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e523\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 7.6.0 to 8.0.0 :pr:\u003ccode\u003e522\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove persist-credentials: false from release job :pr:\u003ccode\u003e520\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e519\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 ci(workflows): add zizmor security auditing :pr:\u003ccode\u003e517\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e516\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e514\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.25.2 (2026-03-11)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(unix): suppress EIO on close in Docker bind mounts :pr:\u003ccode\u003e513\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.25.1 (2026-03-09)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e510\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(win): restore best-effort lock file cleanup on release :pr:\u003ccode\u003e511\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/469b47f192b0a9f8c8b795d9b9f57212c716959b\"\u003e\u003ccode\u003e469b47f\u003c/code\u003e\u003c/a\u003e Release 3.29.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/e85d07281987e0855ba67c03dfdef342ec1097d5\"\u003e\u003ccode\u003ee85d072\u003c/code\u003e\u003c/a\u003e ✨ feat(soft): enable stale lock detection on Windows (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/534\"\u003e#534\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f5ee1712ced6916b2768812ee378183319339944\"\u003e\u003ccode\u003ef5ee171\u003c/code\u003e\u003c/a\u003e 🐛 fix(async): use single-thread executor for lock consistency (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/533\"\u003e#533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/2a954588cdf462a786835eeb102240ce79fecc8b\"\u003e\u003ccode\u003e2a95458\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/530\"\u003e#530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/55de20c0819652362881906fa289feff5a323c19\"\u003e\u003ccode\u003e55de20c\u003c/code\u003e\u003c/a\u003e Release 3.28.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/476b0e4a92776fe530b5d993247342f039004174\"\u003e\u003ccode\u003e476b0e4\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): unbreak release workflow, publish to PyPI again (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/529\"\u003e#529\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/824713edc32b54efd66566907f97c1238502810e\"\u003e\u003ccode\u003e824713e\u003c/code\u003e\u003c/a\u003e ✨ feat(rw): add SoftReadWriteLock for NFS and HPC clusters (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/528\"\u003e#528\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/9879de9298db93ffba0a9f58d9de75e9e2a00fc1\"\u003e\u003ccode\u003e9879de9\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/527\"\u003e#527\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/4cfab498b6916f89be46152efa4a72e9731be98f\"\u003e\u003ccode\u003e4cfab49\u003c/code\u003e\u003c/a\u003e Release 3.26.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/734c9f26e8107ad24886129fc68865f0b46cf71f\"\u003e\u003ccode\u003e734c9f2\u003c/code\u003e\u003c/a\u003e 🐛 fix(asyncio): add \u003cstrong\u003eexit\u003c/strong\u003e to BaseAsyncFileLock and fix \u003cstrong\u003edel\u003c/strong\u003e loop handli...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.25.2...3.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `identify` from 2.6.18 to 2.6.19\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/identify/commit/b39f637a1b9032568e5b21b0474c3583acf1c530\"\u003e\u003ccode\u003eb39f637\u003c/code\u003e\u003c/a\u003e v2.6.19\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/identify/commit/c9768886c7fc78a2f8c7d0d9447064ff7a008eb9\"\u003e\u003ccode\u003ec976888\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/identify/issues/588\"\u003e#588\u003c/a\u003e from hofbi/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/identify/commit/6110d73a67ca4807b6331d21784a92313b9c082b\"\u003e\u003ccode\u003e6110d73\u003c/code\u003e\u003c/a\u003e Add support for 'tif' file extension\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/identify/commit/ccbd337ae1b4c0d03565cd6dd64076c0b4ff7929\"\u003e\u003ccode\u003eccbd337\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/identify/issues/587\"\u003e#587\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/identify/commit/f5af2649530b5cbfdfcf6ac9d3e4f65e198747c2\"\u003e\u003ccode\u003ef5af264\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/identify/commit/a0be59827ac05537a9f8a4e1895133d44f2a4319\"\u003e\u003ccode\u003ea0be598\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/identify/issues/586\"\u003e#586\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/identify/commit/b1840430b285dab369b4b96480614cf429a6a50e\"\u003e\u003ccode\u003eb184043\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pre-commit/identify/compare/v2.6.18...v2.6.19\"\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 `platformdirs` from 4.9.4 to 4.9.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/platformdirs/releases\"\u003eplatformdirs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.9.6\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(release): use double quotes for tag variable expansion by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/477\"\u003etox-dev/platformdirs#477\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/platformdirs/compare/4.9.5...4.9.6\"\u003ehttps://github.com/tox-dev/platformdirs/compare/4.9.5...4.9.6\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/platformdirs/blob/main/docs/changelog.rst\"\u003eplatformdirs's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e4.9.6 (2026-04-09)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(release): use double quotes for tag variable expansion :pr:\u003ccode\u003e477\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e4.9.5 (2026-04-06)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e📝 docs(appauthor): clarify None vs False on Windows :pr:\u003ccode\u003e476\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSeparates implementations of macOS dirs that share a default :pr:\u003ccode\u003e473\u003c/code\u003e - by :user:\u003ccode\u003eGoddesen\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove persist-credentials: false from release job :pr:\u003ccode\u003e472\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003efix: do not duplicate site dirs in Unix.iter_{config,site}_dirs() when use_site_for_root is active :pr:\u003ccode\u003e469\u003c/code\u003e - by\n:user:\u003ccode\u003eviccie30\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 fix(type): resolve ty 0.0.25 type errors :pr:\u003ccode\u003e468\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 ci(workflows): add zizmor security auditing :pr:\u003ccode\u003e467\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(release): generate docstrfmt-compatible changelog entries :pr:\u003ccode\u003e463\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e4.9.4 (2026-03-05)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e461\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate README.md\u003c/li\u003e\n\u003cli\u003e📝 docs: add project logo to documentation :pr:\u003ccode\u003e459\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStandardize .github files to .yaml suffix\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump the all group with 2 updates :pr:\u003ccode\u003e457\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMove SECURITY.md to .github/SECURITY.md\u003c/li\u003e\n\u003cli\u003eAdd permissions to workflows :pr:\u003ccode\u003e455\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd security policy\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e454\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e4.9.2 (2026-02-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e📝 docs: restructure following Diataxis framework :pr:\u003ccode\u003e448\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e📝 docs(platforms): fix RST formatting and TOC hierarchy :pr:\u003ccode\u003e447\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e4.9.1 (2026-02-14)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e📝 docs: enhance README, fix issues, and reorganize platforms.rst :pr:\u003ccode\u003e445\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/56efd776d68a94898b319c108933d0cfbff813af\"\u003e\u003ccode\u003e56efd77\u003c/code\u003e\u003c/a\u003e Release 4.9.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/d5d812a02102c633a39f3dfdddbc6bb1670b13ae\"\u003e\u003ccode\u003ed5d812a\u003c/code\u003e\u003c/a\u003e 🐛 fix(release): use double quotes for tag variable expansion (\u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/c2b0cee3a8261b3a75b283b9ef148d2425d48d35\"\u003e\u003ccode\u003ec2b0cee\u003c/code\u003e\u003c/a\u003e build(deps): bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 in the al...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/7688069a09e03bb4e97fe0f9cf3aebedc8a6f7f9\"\u003e\u003ccode\u003e7688069\u003c/code\u003e\u003c/a\u003e Release 4.9.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/104d28b48c59b327a7832b23509187eef2764af8\"\u003e\u003ccode\u003e104d28b\u003c/code\u003e\u003c/a\u003e 📝 docs(appauthor): clarify None vs False on Windows (\u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/issues/476\"\u003e#476\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/0955048684241725bb2eae8a2ba5bc7f7f46c9a0\"\u003e\u003ccode\u003e0955048\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/bd3c76602f88284eb832c7f5297c354ea7ac5906\"\u003e\u003ccode\u003ebd3c766\u003c/code\u003e\u003c/a\u003e build(deps): bump astral-sh/setup-uv from 7.6.0 to 8.0.0 in the all group (\u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/issues/474\"\u003e#474\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/749ac3f33ffc5af04fb8bb046bbbcc4d5aa562c9\"\u003e\u003ccode\u003e749ac3f\u003c/code\u003e\u003c/a\u003e Separates implementations of macOS dirs that share a default (\u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/issues/473\"\u003e#473\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/cb8815684f15c58ad1b87c8b1d34f9bf2d79780e\"\u003e\u003ccode\u003ecb88156\u003c/code\u003e\u003c/a\u003e Remove persist-credentials: false from release job (\u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/issues/472\"\u003e#472\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/a501eabd7dd0e56116c38fa9dba15f3c0b60010a\"\u003e\u003ccode\u003ea501eab\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/platformdirs/compare/4.9.4...4.9.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 4.5.1 to 4.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.6.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier usage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.6.0 - 2026-04-21\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier\nusage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f35134b05028ec938ac605ae500fdf95462655d3\"\u003e\u003ccode\u003ef35134b\u003c/code\u003e\u003c/a\u003e v4.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2a51ffcb81f6c8ed2e6467913c3343a8800f3ab9\"\u003e\u003ccode\u003e2a51ffc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e from pre-commit/hook-impl-optional-hook-dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/d7dee322abfc765b042f2e3b872aab3c3a867610\"\u003e\u003ccode\u003ed7dee32\u003c/code\u003e\u003c/a\u003e make --hook-dir optional for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/965aeb1c680e8b526342153547f0ec014484c63d\"\u003e\u003ccode\u003e965aeb1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e from pre-commit/hook-impl-required\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2eacc064aa9b5bb33d3a0d84a234b475e34f3096\"\u003e\u003ccode\u003e2eacc06\u003c/code\u003e\u003c/a\u003e --hook-type is required for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f5678bf4ac35cffc0ff7174ad85f7fdc2a5c977e\"\u003e\u003ccode\u003ef5678bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3657\"\u003e#3657\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/054cc5bd6bb1b20faa1eefe09f0de3b68fceee94\"\u003e\u003ccode\u003e054cc5b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/5c0f3024d2524f6e029a4c333392fd9be9fb27f6\"\u003e\u003ccode\u003e5c0f302\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3652\"\u003e#3652\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/a5d91142676630f8130020b35e166e0c0e92b8f4\"\u003e\u003ccode\u003ea5d9114\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/129a1f5ca1eaee0c952a5e7a07faae305c5e15bc\"\u003e\u003ccode\u003e129a1f5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3641\"\u003e#3641\u003c/a\u003e from pre-commit/mxr-patch-1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.5.1...v4.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygments` from 2.19.2 to 2.20.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygments/pygments/releases\"\u003epygments's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.20.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNew lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRell (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003earchetype: Fix catastrophic backtracking in GUID and ID patterns (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3064\"\u003e#3064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eASN.1: Recognize minus sign and fix range operator (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3014\"\u003e#3014\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3060\"\u003e#3060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eC++: Add C++26 keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e), add integer literal suffixes (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eComponentPascal: Fix \u003ccode\u003eanalyse_text\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3028\"\u003e#3028\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3032\"\u003e#3032\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCoq renamed to Rocq (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2883\"\u003e#2883\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2908\"\u003e#2908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCython: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2932\"\u003e#2932\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2933\"\u003e#2933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDebian control: Improve architecture parsing (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3052\"\u003e#3052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDevicetree: Add support for overlay/fragments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3021\"\u003e#3021\u003c/a\u003e), add bytestring support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3022\"\u003e#3022\u003c/a\u003e), fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3057\"\u003e#3057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFennel: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHaskell: Handle escape sequences in character literals (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3069\"\u003e#3069\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/1795\"\u003e#1795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eJava: Add module keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLean4: Add operators \u003ccode\u003e]'\u003c/code\u003e, \u003ccode\u003e]?\u003c/code\u003e, \u003ccode\u003e]!\u003c/code\u003e  (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2946\"\u003e#2946\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLESS: Support single-line comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3005\"\u003e#3005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLilyPond: Update to 2.25.29 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2974\"\u003e#2974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLLVM: Support C-style comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3023\"\u003e#3023\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2978\"\u003e#2978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLua(u): Fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3047\"\u003e#3047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMacaulay2: Update to 1.25.05 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2893\"\u003e#2893\u003c/a\u003e), 1.25.11 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2988\"\u003e#2988\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMathematica: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2957\"\u003e#2957\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emeson: Add additional operators (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMySQL: Update keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2970\"\u003e#2970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eorg-Mode: Support both schedule and deadline (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2899\"\u003e#2899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePHP: Add \u003ccode\u003e__PROPERTY__\u003c/code\u003e magic constant (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2924\"\u003e#2924\u003c/a\u003e), add reserved keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3002\"\u003e#3002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePostgreSQL: Add more keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eprotobuf: Fix namespace tokenization (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2929\"\u003e#2929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePython: Add \u003ccode\u003et\u003c/code\u003e-string support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2973\"\u003e#2973\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3009\"\u003e#3009\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3010\"\u003e#3010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTablegen: Fix infinite loop (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2972\"\u003e#2972\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTera Term macro: Add commands introduced in v5.3 through v5.6 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTOML: Support TOML 1.1.0 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3026\"\u003e#3026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTurtle: Allow empty comment lines (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2980\"\u003e#2980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eXML: Added \u003ccode\u003e.xbrl\u003c/code\u003e as file ending (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2890\"\u003e#2890\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2891\"\u003e#2891\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop Python 3.8, and add Python 3.14 as a supported version (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2987\"\u003e#2987\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eVarious improvements to \u003ccode\u003eautopygmentize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2894\"\u003e#2894\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eonedark\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2977\"\u003e#2977\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ertt\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2895\"\u003e#2895\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCache entry points to improve performance (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2979\"\u003e#2979\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003exterm-256\u003c/code\u003e color table (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3043\"\u003e#3043\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003ekwargs\u003c/code\u003e dictionary getting mutated on each call (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3044\"\u003e#3044\u003c/a\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygments/pygments/blob/master/CHANGES\"\u003epygments's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.20.0\u003c/h2\u003e\n\u003cp\u003e(released March 29th, 2026)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNew lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRell (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003earchetype: Fix catastrophic backtracking in GUID and ID patterns (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3064\"\u003e#3064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eASN.1: Recognize minus sign and fix range operator (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3014\"\u003e#3014\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3060\"\u003e#3060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eC++: Add C++26 keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e), add integer literal suffixes (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eComponentPascal: Fix \u003ccode\u003eanalyse_text\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3028\"\u003e#3028\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3032\"\u003e#3032\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCoq renamed to Rocq (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2883\"\u003e#2883\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2908\"\u003e#2908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCython: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2932\"\u003e#2932\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2933\"\u003e#2933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDebian control: Improve architecture parsing (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3052\"\u003e#3052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDevicetree: Add support for overlay/fragments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3021\"\u003e#3021\u003c/a\u003e), add bytestring support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3022\"\u003e#3022\u003c/a\u003e), fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3057\"\u003e#3057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFennel: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHaskell: Handle escape sequences in character literals (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3069\"\u003e#3069\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/1795\"\u003e#1795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eJava: Add module keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLean4: Add operators \u003ccode\u003e]'\u003c/code\u003e, \u003ccode\u003e]?\u003c/code\u003e, \u003ccode\u003e]!\u003c/code\u003e  (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2946\"\u003e#2946\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLESS: Support single-line comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3005\"\u003e#3005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLilyPond: Update to 2.25.29 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2974\"\u003e#2974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLLVM: Support C-style comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3023\"\u003e#3023\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2978\"\u003e#2978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLua(u): Fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3047\"\u003e#3047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMacaulay2: Update to 1.25.05 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2893\"\u003e#2893\u003c/a\u003e), 1.25.11 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2988\"\u003e#2988\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMathematica: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2957\"\u003e#2957\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emeson: Add additional operators (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMySQL: Update keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2970\"\u003e#2970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eorg-Mode: Support both schedule and deadline (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2899\"\u003e#2899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePHP: Add \u003ccode\u003e__PROPERTY__\u003c/code\u003e magic constant (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2924\"\u003e#2924\u003c/a\u003e), add reserved keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3002\"\u003e#3002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePostgreSQL: Add more keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eprotobuf: Fix namespace tokenization (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2929\"\u003e#2929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePython: Add \u003ccode\u003et\u003c/code\u003e-string support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2973\"\u003e#2973\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3009\"\u003e#3009\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3010\"\u003e#3010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTablegen: Fix infinite loop (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2972\"\u003e#2972\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTera Term macro: Add commands introduced in v5.3 through v5.6 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTOML: Support TOML 1.1.0 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3026\"\u003e#3026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTurtle: Allow empty comment lines (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2980\"\u003e#2980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eXML: Added \u003ccode\u003e.xbrl\u003c/code\u003e as file ending (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2890\"\u003e#2890\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2891\"\u003e#2891\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop Python 3.8, and add Python 3.14 as a supported version (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2987\"\u003e#2987\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eVarious improvements to \u003ccode\u003eautopygmentize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2894\"\u003e#2894\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eonedark\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2977\"\u003e#2977\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ertt\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2895\"\u003e#2895\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCache entry points to improve performance (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2979\"\u003e#2979\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003exterm-256\u003c/code\u003e color table (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3043\"\u003e#3043\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003ekwargs\u003c/code\u003e dictionary getting mutated on each call (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3044\"\u003e#3044\u003c/a\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/pygments/pygments/commit/708197d82827ba2d5ca78bcbb653c7102ce86dcd\"\u003e\u003ccode\u003e708197d\u003c/code\u003e\u003c/a\u003e Fix underline length.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/1d4538ae8621d766ecc91ff59caf76ab75983abc\"\u003e\u003ccode\u003e1d4538a\u003c/code\u003e\u003c/a\u003e Prepare 2.20 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/2ceaee4e634eebae2d10a47fd05406871f6bac8f\"\u003e\u003ccode\u003e2ceaee4\u003c/code\u003e\u003c/a\u003e Update CHANGES.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/e3a3c54b58c7f80bc4db887e471d4f91c77844ed\"\u003e\u003ccode\u003ee3a3c54\u003c/code\u003e\u003c/a\u003e Fix Haskell lexer: handle escape sequences in character literals (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3069\"\u003e#3069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/d7c3453e342dac319f58e4091f4ef183cc49d802\"\u003e\u003ccode\u003ed7c3453\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3071\"\u003e#3071\u003c/a\u003e from pygments/harden-html-formatter\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/0f97e7c37d44abfa4ddfddf44a3290fdad586034\"\u003e\u003ccode\u003e0f97e7c\u003c/code\u003e\u003c/a\u003e Harden the HTML formatter against CSS.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/9f981b2ba42b88ca5bdcebf12cd01efd7cd80aec\"\u003e\u003ccode\u003e9f981b2\u003c/code\u003e\u003c/a\u003e Update CHANGES.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/1d889151024e9a53f3702a60558b29b070306e9e\"\u003e\u003ccode\u003e1d88915\u003c/code\u003e\u003c/a\u003e Update CHANGES.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/c3d93adb9827fc054c3c12b47bde31c781a36a93\"\u003e\u003ccode\u003ec3d93ad\u003c/code\u003e\u003c/a\u003e Fix ASN.1 lexer: recognize minus sign a...\n\n_Description has been truncated_","html_url":"https://github.com/github/annotated-logger/pull/130","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/github%2Fannotated-logger/issues/130","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/130/packages"},{"uuid":"4329117144","node_id":"PR_kwDORlW1Vs7Vo6fD","number":67,"state":"closed","title":"Bump python-json-logger from 2.0.7 to 4.1.0 in /backend","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-04-25T20:27:41.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-25T20:13:48.000Z","updated_at":"2026-04-25T20:27:50.000Z","time_to_close":833,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"python-json-logger","old_version":"2.0.7","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps [python-json-logger](https://github.com/nhairs/python-json-logger) from 2.0.7 to 4.1.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.0.rc1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0.rc1\"\u003e4.0.0.rc1\u003c/a\u003e - 2025-09-07\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.0...v3.2.1\"\u003e3.2.1\u003c/a\u003e - 2024-12-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImport error on \u003ccode\u003eimport pythonjsonlogger.jsonlogger\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/29\"\u003e#29\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/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v2.0.7...v4.1.0\"\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=python-json-logger\u0026package-manager=pip\u0026previous-version=2.0.7\u0026new-version=4.1.0)](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/willmusolf/deepmove/pull/67","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/willmusolf%2Fdeepmove/issues/67","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/67/packages"}],"issue_packages":[{"old_version":"\u003e=2.0.7","new_version":"\u003e=4.0.0","update_type":null,"path":null,"pr_created_at":"2026-06-06T19:21:55.000Z","version_change":"\u003e=2.0.7 → \u003e=4.0.0","issue":{"uuid":"4604835468","node_id":"PR_kwDORESnns7jgKqu","number":511,"state":"closed","title":"build(deps): update python-json-logger requirement from \u003e=2.0.7 to \u003e=4.0.0","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":9,"pull_request":true,"closed_at":"2026-06-06T20:30:28.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-06T19:21:55.000Z","updated_at":"2026-06-07T21:24:32.000Z","time_to_close":4113,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): update","packages":[{"name":"python-json-logger","old_version":"\u003e=2.0.7","new_version":"\u003e=4.0.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":null,"ecosystem":"pip"},"body":"\u003e [!WARNING]\n\u003e Dependabot will stop supporting `python v3.9`!\n\u003e \n\u003e Please upgrade to one of the following versions: `v3.9`, `v3.10`, `v3.11`, `v3.12`, `v3.13`, or `v3.14`.\n\u003e\n\nUpdates the requirements on [python-json-logger](https://github.com/nhairs/python-json-logger) 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/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.0...v3.2.1\"\u003e3.2.1\u003c/a\u003e - 2024-12-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImport error on \u003ccode\u003eimport pythonjsonlogger.jsonlogger\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/29\"\u003e#29\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.1.0...v3.2.0\"\u003e3.2.0\u003c/a\u003e - 2024-12-11\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epythonjsonlogger.[ORJSON,MSGSPEC]_AVAILABLE\u003c/code\u003e no longer imports the respective package when determining availability.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003epythonjsonlogger.[orjson,msgspec]\u003c/code\u003e now throws a \u003ccode\u003epythonjsonlogger.exception.MissingPackageError\u003c/code\u003e when required libraries are not available. These contain more information about what is missing whilst still being an \u003ccode\u003eImportError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edefaults\u003c/code\u003e parameter is no longer ignored and now conforms to the standard library. Setting a defaults dictionary will add the specified keys if the those keys do not exist in a record or weren't passed by the \u003ccode\u003eextra\u003c/code\u003e parameter when logging a message.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etyping_extensions\u003c/code\u003e is only installed on Python version \u0026lt; 3.10.\u003c/li\u003e\n\u003cli\u003eSupport Python 3.13\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/defed00ecccfdf60a3ca37b01c71d07ce1780b4f\"\u003e\u003ccode\u003edefed00\u003c/code\u003e\u003c/a\u003e Release 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/c10f1c219f3ad7ef84381c818313c0b0eb4d52a3\"\u003e\u003ccode\u003ec10f1c2\u003c/code\u003e\u003c/a\u003e [docs] Fix changelog formatting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/ce8268cc1c417c717f68081c68c2eec65bd87454\"\u003e\u003ccode\u003ece8268c\u003c/code\u003e\u003c/a\u003e Release version 4.0.0.rc1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/a8eca471900aaf520f004d89c32db68dd9d8c16f\"\u003e\u003ccode\u003ea8eca47\u003c/code\u003e\u003c/a\u003e [core] Support sequence of strings for Formatter fmt (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/55\"\u003e#55\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b53b9303fa5fa7d43d3b3cff4c5937fcbb012ef4\"\u003e\u003ccode\u003eb53b930\u003c/code\u003e\u003c/a\u003e [core] Add support for comma format (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/54\"\u003e#54\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0428e2b2e06013ac0c2213411815194a2b9338aa\"\u003e\u003ccode\u003e0428e2b\u003c/code\u003e\u003c/a\u003e [core] Rename LogRecord/log_record to LogData/log_data  (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/53\"\u003e#53\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/ac108d9eb09942a9914f17f45b61bad95d697de8\"\u003e\u003ccode\u003eac108d9\u003c/code\u003e\u003c/a\u003e [core,json,orjson,msgspec] Remove use of str_to_object (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/52\"\u003e#52\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0843f5294373153864694a8299e5a8cc639bba42\"\u003e\u003ccode\u003e0843f52\u003c/code\u003e\u003c/a\u003e [docs] Update version added for exc_info_as_array, stack_info_as_array (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/60\"\u003e#60\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/f36b8b59590b098e7e1a0998931e1576412722c6\"\u003e\u003ccode\u003ef36b8b5\u003c/code\u003e\u003c/a\u003e [docs] Add style guide (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/58\"\u003e#58\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/03ad4d1b15c2355e559e73e30bc37ccf5cd776ca\"\u003e\u003ccode\u003e03ad4d1\u003c/code\u003e\u003c/a\u003e [docs] Update documentation (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/57\"\u003e#57\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v2.0.7...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n","html_url":"https://github.com/SHAdd0WTAka/Zen-Ai-Pentest/pull/511","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/SHAdd0WTAka%2FZen-Ai-Pentest/issues/511","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/511/packages"}},{"old_version":"4.0.0","new_version":"4.1.0","update_type":"minor","path":null,"pr_created_at":"2026-06-02T00:37:40.000Z","version_change":"4.0.0 → 4.1.0","issue":{"uuid":"4567378429","node_id":"PR_kwDOQIiWRs7hlHZO","number":277,"state":"closed","title":"build(deps): bump the pip-production-dependencies group across 3 directories with 18 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-03T23:07:03.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-02T00:37:40.000Z","updated_at":"2026-06-03T23:07:05.000Z","time_to_close":167363,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"pip-production-dependencies","update_count":18,"packages":[{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.2.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.38.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.38.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.38.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"grpcio-health-checking","old_version":"1.71.0","new_version":"1.81.0"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-dotenv","old_version":"1.1.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 18 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.81.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n\nBumps the pip-production-dependencies group with 13 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 8 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.81.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.2...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.2.0 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-hooks-opentelemetry` from 0.2.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emigrate to uv (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/293\"\u003e#293\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/9590554be4c8a7f77b0c0f20d6b48076c9870f52\"\u003e9590554\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a2ec682a709a4721f8362cfa6a9e6037937761ee\"\u003ea2ec682\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.38.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.38.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.38.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.38.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-jinja2` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-jinja2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eNo significant changes.\u003c/p\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: update auto-instrumentation to re-inject\ninstrumentation path after init\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4469\"\u003e#4469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e: Add Database client operation duration\nand returned rows metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4481\"\u003e#4481\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments\nand add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Use \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e to\nformat and extract each log record's body text to more closely match the\nexpected usage of the logging system. As a result, all OTel log record bodies\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-requests` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-requests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eNo significant changes.\u003c/p\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: update auto-instrumentation to re-inject\ninstrumentation path after init\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4469\"\u003e#4469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e: Add Database client operation duration\nand returned rows metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4481\"\u003e#4481\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments\nand add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Use \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e to\nformat and extract each log record's body text to more closely match the\nexpected usage of the logging system. As a result, all OTel log record bodies\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-system-metrics` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-system-metrics's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eNo significant changes.\u003c/p\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: update auto-instrumentation to re-inject\ninstrumentation path after init\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4469\"\u003e#4469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e: Add Database client operation duration\nand returned rows metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4481\"\u003e#4481\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments\nand add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Use \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e to\nformat and extract each log record's body text to more closely match the\nexpected usage of the logging system. As a result, all OTel log record bodies\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-urllib3` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-urllib3's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eNo significant changes.\u003c/p\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: update auto-instrumentation to re-inject\ninstrumentation path after init\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4469\"\u003e#4469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e: Add Database client operation duration\nand returned rows metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4481\"\u003e#4481\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments\nand add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Use \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e to\nformat and extract each log record's body text to more closely match the\nexpected usage of the logging system. As a result, all OTel log record bodies\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-sdk` from 1.38.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.38.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-semantic-conventions` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-semantic-conventions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-logging` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-logging's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eNo significant changes.\u003c/p\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: update auto-instrumentation to re-inject\ninstrumentation path after init\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4469\"\u003e#4469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e: Add Database client operation duration\nand returned rows metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4481\"\u003e#4481\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments\nand add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Use \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e to\nformat and extract each log record's body text to more closely match the\nexpected usage of the logging system. As a result, all OTel log record bodies\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio-health-checking` from 1.71.0 to 1.81.0\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-...\n\n_Description has been truncated_","html_url":"https://github.com/monoscope-tech/oteldemo/pull/277","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/monoscope-tech%2Foteldemo/issues/277","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/277/packages"}},{"old_version":"4.0.0","new_version":"4.1.0","update_type":"minor","path":null,"pr_created_at":"2026-05-22T15:00:48.000Z","version_change":"4.0.0 → 4.1.0","issue":{"uuid":"4503602899","node_id":"PR_kwDOQGVLVM7eZMqK","number":279,"state":"closed","title":"build(deps): bump the pip-production-dependencies group across 3 directories with 18 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-02T20:35:22.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-22T15:00:48.000Z","updated_at":"2026-06-02T20:35:24.000Z","time_to_close":970474,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"pip-production-dependencies","update_count":18,"packages":[{"name":"grpcio-health-checking","old_version":"1.71.0","new_version":"1.80.0"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.2.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.37.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-dotenv","old_version":"1.1.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.37.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.37.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 18 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 13 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 8 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n\n\nUpdates `grpcio-health-checking` from 1.71.0 to 1.80.0\n\nUpdates `openfeature-hooks-opentelemetry` from 0.2.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emigrate to uv (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/293\"\u003e#293\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/9590554be4c8a7f77b0c0f20d6b48076c9870f52\"\u003e9590554\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a2ec682a709a4721f8362cfa6a9e6037937761ee\"\u003ea2ec682\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.4.0...openfeature-provider-flagd/v0.4.1\"\u003e0.4.1\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evarious custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003ec119a77\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eflagd:\u003c/strong\u003e extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e1995534\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.3.0...openfeature-provider-flagd/v0.4.0\"\u003e0.4.0\u003c/a\u003e (2026-04-01)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/83c3e48595c0f44b4a3259719a5d85fde987f492\"\u003e83c3e48\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eintroduce list for fatal status codes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/362\"\u003e#362\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/96a88ada622fb7941a1d4d58205ff3342180fa9a\"\u003e96a88ad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.7...openfeature-provider-flagd/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-03-11)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.2.7\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/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/564eb68aa513e6d8b5fb06aa5f632f427b11abe5\"\u003e\u003ccode\u003e564eb68\u003c/code\u003e\u003c/a\u003e fix(security): update dependency pytest to v9.0.3 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.3...openfeature-provider-flagd/v0.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.58b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-distro's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.37.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.37.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.0.0 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.0.0...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.1.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cpackham-atlnz\"\u003e\u003ccode\u003e@​cpackham-atlnz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/597\"\u003etheskumar/python-dotenv#597\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.2.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\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/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.1] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMove more config to \u003ccode\u003epyproject.toml\u003c/code\u003e, removed \u003ccode\u003esetup.cfg\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for reading \u003ccode\u003e.env\u003c/code\u003e from FIFOs (Unix) by [\u003ca href=\"https://github.com/sidharth-sudhir\"\u003e\u003ccode\u003e@​sidharth-sudhir\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/586\"\u003e#586\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.0] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade build system to use PEP 517 \u0026amp; PEP 518 to use \u003ccode\u003ebuild\u003c/code\u003e and \u003ccode\u003epyproject.toml\u003c/code\u003e by [\u003ca href=\"https://github.com/EpicWink\"\u003e\u003ccode\u003e@​EpicWink\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/583\"\u003e#583\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 by [\u003ca href=\"https://github.com/23f3001135\"\u003e\u003ccode\u003e@​23f3001135\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/579\"\u003e#579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for disabling of \u003ccode\u003eload_dotenv()\u003c/code\u003e using \u003ccode\u003ePYTHON_DOTENV_DISABLED\u003c/code\u003e env var. by [\u003ca href=\"https://github.com/matthewfranglen\"\u003e\u003ccode\u003e@​matthewfranglen\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/569\"\u003e#569\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/36004e0e34be7665ff2b11a8a4005144f76f176d\"\u003e\u003ccode\u003e36004e0\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.1 → 1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/eb202520e5933c9daf42501e1e42fdb0144002c8\"\u003e\u003ccode\u003eeb20252\u003c/code\u003e\u003c/a\u003e docs: update changelog for v1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e\u003ccode\u003e790c5c0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/43340da220fb4ca4f95357bbe21a3c7f8f1278b1\"\u003e\u003ccode\u003e43340da\u003c/code\u003e\u003c/a\u003e Remove the use of \u003ccode\u003esh\u003c/code\u003e in tests (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/09d7cee32459e7abdcb5c9d8122a552589c06a9c\"\u003e\u003ccode\u003e09d7cee\u003c/code\u003e\u003c/a\u003e docs: clarify override behavior and document FIFO support (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/c8de2887c00198c22842c5ae5e92d1747467363c\"\u003e\u003ccode\u003ec8de288\u003c/code\u003e\u003c/a\u003e ci: improve workflow efficiency with best practices (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/609\"\u003e#609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/7bd9e3dbfedc0983ad7d56d5570013035242bdf4\"\u003e\u003ccode\u003e7bd9e3d\u003c/code\u003e\u003c/a\u003e Add Windows testing to CI (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/1baaf04f336072e0ee324d5df9563ec767f14f81\"\u003e\u003ccode\u003e1baaf04\u003c/code\u003e\u003c/a\u003e Drop Python 3.9 support and update to PyPy 3.11 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a22cf8993804aeede0c20b75bb1a29d3a99e9dc\"\u003e\u003ccode\u003e4a22cf8\u003c/code\u003e\u003c/a\u003e ci: enable testing on Python 3.14t (free-threaded) (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e2e8e776b42e382ae38b44d3982dd649e7507dd4\"\u003e\u003ccode\u003ee2e8e77\u003c/code\u003e\u003c/a\u003e Fix license specifier (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.1.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.2...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.2.0 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.37.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.37.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-jinja2` from 0.58b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-jinja2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-requests` from 0.58b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-requests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/...\n\n_Description has been truncated_","html_url":"https://github.com/BramVerkuijlen/Minimal-OTel-Demo/pull/279","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/BramVerkuijlen%2FMinimal-OTel-Demo/issues/279","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/279/packages"}},{"old_version":"\u003e=2.0.7","new_version":"\u003e=4.1.0","update_type":"minor","path":"/backend","pr_created_at":"2026-05-22T10:55:49.000Z","version_change":"\u003e=2.0.7 → \u003e=4.1.0","issue":{"uuid":"4502049716","node_id":"PR_kwDOR9Fu287eUGgT","number":28,"state":"open","title":"Update python-json-logger requirement from \u003e=2.0.7 to \u003e=4.1.0 in /backend","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-22T10:55:49.000Z","updated_at":"2026-05-22T10:55:50.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"python-json-logger","old_version":"\u003e=2.0.7","new_version":"\u003e=4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":"/backend","ecosystem":"pip"},"body":"Updates the requirements on [python-json-logger](https://github.com/nhairs/python-json-logger) 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/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.0...v3.2.1\"\u003e3.2.1\u003c/a\u003e - 2024-12-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImport error on \u003ccode\u003eimport pythonjsonlogger.jsonlogger\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/29\"\u003e#29\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/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v2.0.7...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore 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/Akanaifu/TFE-Cycling/pull/28","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Akanaifu%2FTFE-Cycling/issues/28","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/28/packages"}},{"old_version":"4.0.0","new_version":"4.1.0","update_type":"minor","path":null,"pr_created_at":"2026-05-22T07:59:43.000Z","version_change":"4.0.0 → 4.1.0","issue":{"uuid":"4500961536","node_id":"PR_kwDOQIiWRs7eQkAC","number":267,"state":"closed","title":"build(deps): bump the pip-production-dependencies group across 3 directories with 18 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-02T00:37:44.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-22T07:59:43.000Z","updated_at":"2026-06-02T00:37:46.000Z","time_to_close":923881,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"pip-production-dependencies","update_count":18,"packages":[{"name":"grpcio-health-checking","old_version":"1.71.0","new_version":"1.80.0"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.2.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.38.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-dotenv","old_version":"1.1.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.38.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.38.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.59b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 18 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 13 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.59b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 8 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.59b0` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.38.0` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n\n\nUpdates `grpcio-health-checking` from 1.71.0 to 1.80.0\n\nUpdates `openfeature-hooks-opentelemetry` from 0.2.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emigrate to uv (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/293\"\u003e#293\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/9590554be4c8a7f77b0c0f20d6b48076c9870f52\"\u003e9590554\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a2ec682a709a4721f8362cfa6a9e6037937761ee\"\u003ea2ec682\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.4.0...openfeature-provider-flagd/v0.4.1\"\u003e0.4.1\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evarious custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003ec119a77\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eflagd:\u003c/strong\u003e extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e1995534\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.3.0...openfeature-provider-flagd/v0.4.0\"\u003e0.4.0\u003c/a\u003e (2026-04-01)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/83c3e48595c0f44b4a3259719a5d85fde987f492\"\u003e83c3e48\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eintroduce list for fatal status codes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/362\"\u003e#362\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/96a88ada622fb7941a1d4d58205ff3342180fa9a\"\u003e96a88ad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.7...openfeature-provider-flagd/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-03-11)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.2.7\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/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/564eb68aa513e6d8b5fb06aa5f632f427b11abe5\"\u003e\u003ccode\u003e564eb68\u003c/code\u003e\u003c/a\u003e fix(security): update dependency pytest to v9.0.3 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.3...openfeature-provider-flagd/v0.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-distro's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.38.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.38.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.0.0 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.0.0...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.1.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cpackham-atlnz\"\u003e\u003ccode\u003e@​cpackham-atlnz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/597\"\u003etheskumar/python-dotenv#597\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.2.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\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/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.1] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMove more config to \u003ccode\u003epyproject.toml\u003c/code\u003e, removed \u003ccode\u003esetup.cfg\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for reading \u003ccode\u003e.env\u003c/code\u003e from FIFOs (Unix) by [\u003ca href=\"https://github.com/sidharth-sudhir\"\u003e\u003ccode\u003e@​sidharth-sudhir\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/586\"\u003e#586\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.0] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade build system to use PEP 517 \u0026amp; PEP 518 to use \u003ccode\u003ebuild\u003c/code\u003e and \u003ccode\u003epyproject.toml\u003c/code\u003e by [\u003ca href=\"https://github.com/EpicWink\"\u003e\u003ccode\u003e@​EpicWink\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/583\"\u003e#583\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 by [\u003ca href=\"https://github.com/23f3001135\"\u003e\u003ccode\u003e@​23f3001135\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/579\"\u003e#579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for disabling of \u003ccode\u003eload_dotenv()\u003c/code\u003e using \u003ccode\u003ePYTHON_DOTENV_DISABLED\u003c/code\u003e env var. by [\u003ca href=\"https://github.com/matthewfranglen\"\u003e\u003ccode\u003e@​matthewfranglen\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/569\"\u003e#569\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/36004e0e34be7665ff2b11a8a4005144f76f176d\"\u003e\u003ccode\u003e36004e0\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.1 → 1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/eb202520e5933c9daf42501e1e42fdb0144002c8\"\u003e\u003ccode\u003eeb20252\u003c/code\u003e\u003c/a\u003e docs: update changelog for v1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e\u003ccode\u003e790c5c0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/43340da220fb4ca4f95357bbe21a3c7f8f1278b1\"\u003e\u003ccode\u003e43340da\u003c/code\u003e\u003c/a\u003e Remove the use of \u003ccode\u003esh\u003c/code\u003e in tests (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/09d7cee32459e7abdcb5c9d8122a552589c06a9c\"\u003e\u003ccode\u003e09d7cee\u003c/code\u003e\u003c/a\u003e docs: clarify override behavior and document FIFO support (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/c8de2887c00198c22842c5ae5e92d1747467363c\"\u003e\u003ccode\u003ec8de288\u003c/code\u003e\u003c/a\u003e ci: improve workflow efficiency with best practices (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/609\"\u003e#609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/7bd9e3dbfedc0983ad7d56d5570013035242bdf4\"\u003e\u003ccode\u003e7bd9e3d\u003c/code\u003e\u003c/a\u003e Add Windows testing to CI (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/1baaf04f336072e0ee324d5df9563ec767f14f81\"\u003e\u003ccode\u003e1baaf04\u003c/code\u003e\u003c/a\u003e Drop Python 3.9 support and update to PyPy 3.11 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a22cf8993804aeede0c20b75bb1a29d3a99e9dc\"\u003e\u003ccode\u003e4a22cf8\u003c/code\u003e\u003c/a\u003e ci: enable testing on Python 3.14t (free-threaded) (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e2e8e776b42e382ae38b44d3982dd649e7507dd4\"\u003e\u003ccode\u003ee2e8e77\u003c/code\u003e\u003c/a\u003e Fix license specifier (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.1.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.2...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.2.0 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.38.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.38.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-jinja2` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-jinja2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-requests` from 0.59b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-requests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/...\n\n_Description has been truncated_","html_url":"https://github.com/monoscope-tech/oteldemo/pull/267","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/monoscope-tech%2Foteldemo/issues/267","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/267/packages"}},{"old_version":"3.3.0","new_version":"4.1.0","update_type":"major","path":null,"pr_created_at":"2026-05-22T03:48:44.000Z","version_change":"3.3.0 → 4.1.0","issue":{"uuid":"4499667855","node_id":"PR_kwDOPzk3Ms7eMbhe","number":286,"state":"closed","title":"build(deps): bump the pip-production-dependencies group across 3 directories with 19 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-01T06:50:56.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-22T03:48:44.000Z","updated_at":"2026-06-01T06:50:58.000Z","time_to_close":874932,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"pip-production-dependencies","update_count":19,"packages":[{"name":"grpcio-health-checking","old_version":"1.71.0","new_version":"1.80.0"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.2.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.37.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-dotenv","old_version":"1.1.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-json-logger","old_version":"3.3.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"locust-plugins","old_version":"4.7.0","new_version":"5.0.0","repository_url":"https://github.com/SvenskaSpel/locust-plugins"},{"name":"openfeature-provider-ofrep","old_version":"0.1.1","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.37.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.37.0","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.58b0","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 19 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `3.3.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [locust-plugins](https://github.com/SvenskaSpel/locust-plugins) | `4.7.0` | `5.0.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.1.1` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 14 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `3.3.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [locust-plugins](https://github.com/SvenskaSpel/locust-plugins) | `4.7.0` | `5.0.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.1.1` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.58b0` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 8 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.58b0` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.37.0` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `3.3.0` | `4.1.0` |\n\n\nUpdates `grpcio-health-checking` from 1.71.0 to 1.80.0\n\nUpdates `openfeature-hooks-opentelemetry` from 0.2.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emigrate to uv (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/293\"\u003e#293\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/9590554be4c8a7f77b0c0f20d6b48076c9870f52\"\u003e9590554\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a2ec682a709a4721f8362cfa6a9e6037937761ee\"\u003ea2ec682\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.4.0...openfeature-provider-flagd/v0.4.1\"\u003e0.4.1\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evarious custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003ec119a77\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eflagd:\u003c/strong\u003e extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e1995534\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.3.0...openfeature-provider-flagd/v0.4.0\"\u003e0.4.0\u003c/a\u003e (2026-04-01)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/83c3e48595c0f44b4a3259719a5d85fde987f492\"\u003e83c3e48\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eintroduce list for fatal status codes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/362\"\u003e#362\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/96a88ada622fb7941a1d4d58205ff3342180fa9a\"\u003e96a88ad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.7...openfeature-provider-flagd/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-03-11)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.2.7\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/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/564eb68aa513e6d8b5fb06aa5f632f427b11abe5\"\u003e\u003ccode\u003e564eb68\u003c/code\u003e\u003c/a\u003e fix(security): update dependency pytest to v9.0.3 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.3...openfeature-provider-flagd/v0.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.58b0 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-distro's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.37.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.37.0...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.0.0 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.0.0...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.1.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cpackham-atlnz\"\u003e\u003ccode\u003e@​cpackham-atlnz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/597\"\u003etheskumar/python-dotenv#597\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.2.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\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/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.1] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMove more config to \u003ccode\u003epyproject.toml\u003c/code\u003e, removed \u003ccode\u003esetup.cfg\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for reading \u003ccode\u003e.env\u003c/code\u003e from FIFOs (Unix) by [\u003ca href=\"https://github.com/sidharth-sudhir\"\u003e\u003ccode\u003e@​sidharth-sudhir\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/586\"\u003e#586\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.0] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade build system to use PEP 517 \u0026amp; PEP 518 to use \u003ccode\u003ebuild\u003c/code\u003e and \u003ccode\u003epyproject.toml\u003c/code\u003e by [\u003ca href=\"https://github.com/EpicWink\"\u003e\u003ccode\u003e@​EpicWink\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/583\"\u003e#583\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 by [\u003ca href=\"https://github.com/23f3001135\"\u003e\u003ccode\u003e@​23f3001135\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/579\"\u003e#579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for disabling of \u003ccode\u003eload_dotenv()\u003c/code\u003e using \u003ccode\u003ePYTHON_DOTENV_DISABLED\u003c/code\u003e env var. by [\u003ca href=\"https://github.com/matthewfranglen\"\u003e\u003ccode\u003e@​matthewfranglen\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/569\"\u003e#569\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/36004e0e34be7665ff2b11a8a4005144f76f176d\"\u003e\u003ccode\u003e36004e0\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.1 → 1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/eb202520e5933c9daf42501e1e42fdb0144002c8\"\u003e\u003ccode\u003eeb20252\u003c/code\u003e\u003c/a\u003e docs: update changelog for v1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e\u003ccode\u003e790c5c0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/43340da220fb4ca4f95357bbe21a3c7f8f1278b1\"\u003e\u003ccode\u003e43340da\u003c/code\u003e\u003c/a\u003e Remove the use of \u003ccode\u003esh\u003c/code\u003e in tests (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/09d7cee32459e7abdcb5c9d8122a552589c06a9c\"\u003e\u003ccode\u003e09d7cee\u003c/code\u003e\u003c/a\u003e docs: clarify override behavior and document FIFO support (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/c8de2887c00198c22842c5ae5e92d1747467363c\"\u003e\u003ccode\u003ec8de288\u003c/code\u003e\u003c/a\u003e ci: improve workflow efficiency with best practices (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/609\"\u003e#609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/7bd9e3dbfedc0983ad7d56d5570013035242bdf4\"\u003e\u003ccode\u003e7bd9e3d\u003c/code\u003e\u003c/a\u003e Add Windows testing to CI (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/1baaf04f336072e0ee324d5df9563ec767f14f81\"\u003e\u003ccode\u003e1baaf04\u003c/code\u003e\u003c/a\u003e Drop Python 3.9 support and update to PyPy 3.11 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a22cf8993804aeede0c20b75bb1a29d3a99e9dc\"\u003e\u003ccode\u003e4a22cf8\u003c/code\u003e\u003c/a\u003e ci: enable testing on Python 3.14t (free-threaded) (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e2e8e776b42e382ae38b44d3982dd649e7507dd4\"\u003e\u003ccode\u003ee2e8e77\u003c/code\u003e\u003c/a\u003e Fix license specifier (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.1.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 3.3.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.0.rc1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0.rc1\"\u003e4.0.0.rc1\u003c/a\u003e - 2025-09-07\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\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/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.2...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `locust-plugins` from 4.7.0 to 5.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/releases\"\u003elocust-plugins's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.0.0\u003c/h2\u003e\n\u003cp\u003eNo real new features, but the removals are a breaking change, hence the major version bump.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove MqttUser as it is now part of locust core by \u003ca href=\"https://github.com/ionutab\"\u003e\u003ccode\u003e@​ionutab\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SvenskaSpel/locust-plugins/pull/224\"\u003eSvenskaSpel/locust-plugins#224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove SocketIOUser now that it is part of locust core, update HttpSession usage to match locust 2.40.0 by \u003ca href=\"https://github.com/cyberw\"\u003e\u003ccode\u003e@​cyberw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SvenskaSpel/locust-plugins/pull/225\"\u003eSvenskaSpel/locust-plugins#225\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove import error catcher for legacy imports from locust plugins.users by \u003ca href=\"https://github.com/cyberw\"\u003e\u003ccode\u003e@​cyberw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SvenskaSpel/locust-plugins/pull/227\"\u003eSvenskaSpel/locust-plugins#227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/compare/4.7.0...5.0.0\"\u003ehttps://github.com/SvenskaSpel/locust-plugins/compare/4.7.0...5.0.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/SvenskaSpel/locust-plugins/commit/d60bb991b87663b25dd71ac6fe125019fcbfa325\"\u003e\u003ccode\u003ed60bb99\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/SvenskaSpel/locust-plugins/issues/227\"\u003e#227\u003c/a\u003e from SvenskaSpel/remove-import-error-catcher-for-impo...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/401308cdcd0bf52d32d63f92d82330117558a064\"\u003e\u003ccode\u003e401308c\u003c/code\u003e\u003c/a\u003e remove no_extras test in one more place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/97fbb45480d4842e02b1f3b1deea174570a639ef\"\u003e\u003ccode\u003e97fbb45\u003c/code\u003e\u003c/a\u003e fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/712d739d08be99964f9bc4875561547c052d5e9d\"\u003e\u003ccode\u003e712d739\u003c/code\u003e\u003c/a\u003e GH actions: use distributor_ex.py instead of rest_ex.py. Remove \u0026quot;no extras\u0026quot; t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/980c93b5601f8e593278087f91ec2e84e750e8ca\"\u003e\u003ccode\u003e980c93b\u003c/code\u003e\u003c/a\u003e Remove legacy import error catcher for imports from locust_plugins.users\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/937f0acf44a46096aefa6dcc75c406519b8a52fc\"\u003e\u003ccode\u003e937f0ac\u003c/code\u003e\u003c/a\u003e Remove RestUser placeholder\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/77d9c53f0cd9fdb52df754b4c791514e85914749\"\u003e\u003ccode\u003e77d9c53\u003c/code\u003e\u003c/a\u003e docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/6bf6522d15ccabb9e61ce49c617d211d64128c91\"\u003e\u003ccode\u003e6bf6522\u003c/code\u003e\u003c/a\u003e update readme to mention Users that have been added to core instead\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/0c0382d553f8a52083f3f0af1c48b82b8b487fc0\"\u003e\u003ccode\u003e0c0382d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/SvenskaSpel/locust-plugins/issues/225\"\u003e#225\u003c/a\u003e from SvenskaSpel/update-httpsession-usage-to-match-lo...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/commit/b1f543242057f0b42ee7b24ae89011159548ead5\"\u003e\u003ccode\u003eb1f5432\u003c/code\u003e\u003c/a\u003e better error message for test_missing_extras\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/SvenskaSpel/locust-plugins/compare/4.7.0...5.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.1.1 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.2.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.1.1...openfeature-provider-ofrep/v0.2.0\"\u003e0.2.0\u003c/a\u003e (2025-09-25)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.8 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/187\"\u003e#187\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.8 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/187\"\u003e#187\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b55cc1e0f823d05a330c12af6861dbd3bec69c3a\"\u003eb55cc1e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereturn default dict if not meta provided (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/304\"\u003e#304\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/05c99eb9948902a6860af848327633d39f1c5293\"\u003e05c99eb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emigrate to uv (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/293\"\u003e#293\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/9590554be4c8a7f77b0c0f20d6b48076c9870f52\"\u003e9590554\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate python-sdk (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/289\"\u003e#289\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/f2028f5f81824310a842507a3127a3bb9bc8a984\"\u003ef2028f5\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.1.1...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.37.0 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca hr...\n\n_Description has been truncated_","html_url":"https://github.com/AcheampongStephen/OpenTelemetry/pull/286","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/AcheampongStephen%2FOpenTelemetry/issues/286","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/286/packages"}},{"old_version":"4.0.0","new_version":"4.1.0","update_type":"minor","path":null,"pr_created_at":"2026-05-21T20:52:57.000Z","version_change":"4.0.0 → 4.1.0","issue":{"uuid":"4497837028","node_id":"PR_kwDORX-XEs7eGjAu","number":208,"state":"closed","title":"Bump the pip-production-dependencies group across 5 directories with 21 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-22T20:32:57.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-21T20:52:57.000Z","updated_at":"2026-05-22T20:32:59.000Z","time_to_close":85200,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-production-dependencies","update_count":21,"packages":[{"name":"grpcio-health-checking","old_version":"1.78.0","new_version":"1.80.0"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.3.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.60b1","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.39.1","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-dotenv","old_version":"1.2.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"psycopg2-binary","old_version":"2.9.11","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"openai","old_version":"2.17.0","new_version":"2.37.0","repository_url":"https://github.com/openai/openai-python"},{"name":"simplejson","old_version":"3.20.2","new_version":"4.1.1","repository_url":"https://github.com/simplejson/simplejson"},{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.39.1","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.60b1","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.60b1","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.60b1","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.60b1","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.39.1","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.60b1","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.60b1","new_version":"0.63b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 21 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.17.0` | `2.37.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 4 updates in the /src/llm directory: [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib), [python-dotenv](https://github.com/theskumar/python-dotenv), [python-json-logger](https://github.com/nhairs/python-json-logger) and [flask](https://github.com/pallets/flask).\nBumps the pip-production-dependencies group with 13 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.60b1` | `0.63b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n\nBumps the pip-production-dependencies group with 11 updates in the /src/product-reviews directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.17.0` | `2.37.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n\nBumps the pip-production-dependencies group with 8 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n\n\nUpdates `grpcio-health-checking` from 1.78.0 to 1.80.0\n\nUpdates `openfeature-hooks-opentelemetry` from 0.3.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.4.0...openfeature-provider-flagd/v0.4.1\"\u003e0.4.1\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evarious custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003ec119a77\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eflagd:\u003c/strong\u003e extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e1995534\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.3.0...openfeature-provider-flagd/v0.4.0\"\u003e0.4.0\u003c/a\u003e (2026-04-01)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/83c3e48595c0f44b4a3259719a5d85fde987f492\"\u003e83c3e48\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eintroduce list for fatal status codes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/362\"\u003e#362\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/96a88ada622fb7941a1d4d58205ff3342180fa9a\"\u003e96a88ad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.7...openfeature-provider-flagd/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-03-11)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.2.7\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/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/564eb68aa513e6d8b5fb06aa5f632f427b11abe5\"\u003e\u003ccode\u003e564eb68\u003c/code\u003e\u003c/a\u003e fix(security): update dependency pytest to v9.0.3 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.3...openfeature-provider-flagd/v0.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.60b1 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.39.1 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.42.1/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.39.1...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.0.0 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.0.0...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.2.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cpackham-atlnz\"\u003e\u003ccode\u003e@​cpackham-atlnz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/597\"\u003etheskumar/python-dotenv#597\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/36004e0e34be7665ff2b11a8a4005144f76f176d\"\u003e\u003ccode\u003e36004e0\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.1 → 1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/eb202520e5933c9daf42501e1e42fdb0144002c8\"\u003e\u003ccode\u003eeb20252\u003c/code\u003e\u003c/a\u003e docs: update changelog for v1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e\u003ccode\u003e790c5c0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/43340da220fb4ca4f95357bbe21a3c7f8f1278b1\"\u003e\u003ccode\u003e43340da\u003c/code\u003e\u003c/a\u003e Remove the use of \u003ccode\u003esh\u003c/code\u003e in tests (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/09d7cee32459e7abdcb5c9d8122a552589c06a9c\"\u003e\u003ccode\u003e09d7cee\u003c/code\u003e\u003c/a\u003e docs: clarify override behavior and document FIFO support (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/c8de2887c00198c22842c5ae5e92d1747467363c\"\u003e\u003ccode\u003ec8de288\u003c/code\u003e\u003c/a\u003e ci: improve workflow efficiency with best practices (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/609\"\u003e#609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/7bd9e3dbfedc0983ad7d56d5570013035242bdf4\"\u003e\u003ccode\u003e7bd9e3d\u003c/code\u003e\u003c/a\u003e Add Windows testing to CI (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/1baaf04f336072e0ee324d5df9563ec767f14f81\"\u003e\u003ccode\u003e1baaf04\u003c/code\u003e\u003c/a\u003e Drop Python 3.9 support and update to PyPy 3.11 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a22cf8993804aeede0c20b75bb1a29d3a99e9dc\"\u003e\u003ccode\u003e4a22cf8\u003c/code\u003e\u003c/a\u003e ci: enable testing on Python 3.14t (free-threaded) (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e2e8e776b42e382ae38b44d3982dd649e7507dd4\"\u003e\u003ccode\u003ee2e8e77\u003c/code\u003e\u003c/a\u003e Fix license specifier (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.11 to 2.9.12\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWheel package bundled with PostgreSQL 16 libpq in order to add support for\nrecent features, such as \u003ccode\u003esslcertmode\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.7\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix propagation of exceptions raised during module initialization\n(:ticket:\u003ccode\u003e[#1598](https://github.com/psycopg/psycopg2/issues/1598)\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/psycopg/psycopg2/commit/3a6d9d6ddc6b53eaa80b712f5fa6b23abbdc38db\"\u003e\u003ccode\u003e3a6d9d6\u003c/code\u003e\u003c/a\u003e ci: include almalinux in whieel building\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/ebca6bf0f86bc6cbdc86de1eb3a53eaf49966d86\"\u003e\u003ccode\u003eebca6bf\u003c/code\u003e\u003c/a\u003e chore: bump to version 3.9.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/0196f02cc9512df8de3c941f87d27bda98f9f7af\"\u003e\u003ccode\u003e0196f02\u003c/code\u003e\u003c/a\u003e build(deps): bump pypa/cibuildwheel from 3.3.1 to 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d157bdc2235a42dc1742936dbb0f5cfc8e4d2eb7\"\u003e\u003ccode\u003ed157bdc\u003c/code\u003e\u003c/a\u003e build(deps): bump docker/setup-qemu-action from 3 to 4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/7fccc0f5066a40dea530512abbf02621f4182b81\"\u003e\u003ccode\u003e7fccc0f\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/upload-artifact from 6 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d52a61eb2e6095fc1b9891bfcca44ebfac509e55\"\u003e\u003ccode\u003ed52a61e\u003c/code\u003e\u003c/a\u003e chore: bump dependency libraries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/b231d726a01d55e07ec3620b2b82f4a2da37ba62\"\u003e\u003ccode\u003eb231d72\u003c/code\u003e\u003c/a\u003e chore: fix building binary images\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/6d76e8479f0f522c2e07ce0e2701030d8fd63785\"\u003e\u003ccode\u003e6d76e84\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg2/issues/1836\"\u003e#1836\u003c/a\u003e from psycopg/fix-1835\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f7e314c7ab418ab9b9956e694956089a49c5c3b9\"\u003e\u003ccode\u003ef7e314c\u003c/code\u003e\u003c/a\u003e fix: overflow in malformed interval\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/eb905c124b75f2a5183d22177b85af20914b0f17\"\u003e\u003ccode\u003eeb905c1\u003c/code\u003e\u003c/a\u003e docs: replace bare except clause with except Exception\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.11...2.9.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.17.0 to 2.37.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.37.0\u003c/h2\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\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 add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.36.0\u003c/h2\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.35.1\u003c/h2\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix imagegen \u003ccode\u003esize\u003c/code\u003e enum regression (\u003ca href=\"https://github.com/openai/openai-python/commit/44846536bc3b02c393daa5bae70a85de04c7f621\"\u003e4484653\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.35.0\u003c/h2\u003e\n\u003ch2\u003e2.35.0 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.34.0...v2.35.0\"\u003ev2.34.0...v2.35.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update image 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/0ba55d7569565045426e1587906a70d5682a4bba\"\u003e0ba55d7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/72bf67acbc9f030c20db3d5a1a74ea6d67d55f51\"\u003e72bf67a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove legacy python cli (\u003ca href=\"https://github.com/openai/openai-python/commit/32f36e447d02c3124af8ab48fcc3537df2fed66e\"\u003e32f36e4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erename legacy python cli entrypoint (\u003ca href=\"https://github.com/openai/openai-python/commit/a3b182d6d2c2e6fe1d53ca7550b2d43e0f8b2cd3\"\u003ea3b182d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\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 add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix imagegen \u003ccode\u003esize\u003c/code\u003e enum regression (\u003ca href=\"https://github.com/openai/openai-python/commit/44846536bc3b02c393daa5bae70a85de04c7f621\"\u003e4484653\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.35.0 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.34.0...v2.35.0\"\u003ev2.34.0...v2.35.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update image 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/0ba55d7569565045426e1587906a70d5682a4bba\"\u003e0ba55d7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/72bf67acbc9f030c20db3d5a1a74ea6d67d55f51\"\u003e72bf67a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove legacy python cli (\u003ca href=\"https://github.com/openai/openai-python/commit/32f36e447d02c3124af8ab48fcc3537df2fed66e\"\u003e32f36e4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erename legacy python cli entrypoint (\u003ca href=\"https://github.com/openai/openai-python/commit/a3b182d6d2c2e6fe1d53ca7550b2d43e0f8b2cd3\"\u003ea3b182d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/658be644f48028ea3c7b1545034470fda75a70ba\"\u003e\u003ccode\u003e658be64\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3213\"\u003e#3213\u003c/a\u003e from openai/release-please--branches--main--changes-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8a7cac34cbc64fe02854beb3659f4bb5f46815f9\"\u003e\u003ccode\u003e8a7cac3\u003c/code\u003e\u003c/a\u003e release: 2.37.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/9b4bf8edbac6aab217f1ac4436a47cbca2cad43b\"\u003e\u003ccode\u003e9b4bf8e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/1903\"\u003e#1903\u003c/a\u003e from stainless-sdks/dev/jtian/remove-unnecessary-params\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003e\u003ccode\u003ec39ea8d\u003c/code\u003e\u003c/a\u003e feat: Remove unnecessary client_id when using workload identity provider for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e\u003ccode\u003e7e527bc\u003c/code\u003e\u003c/a\u003e feat(internal/types): support eagerly validating pydantic iterators\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e\u003ccode\u003e625827c\u003c/code\u003e\u003c/a\u003e feat(api): add service_tier parameter to responses compact method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003e\u003ccode\u003ec85ebd9\u003c/code\u003e\u003c/a\u003e fix(client): add missing f-string prefix in file type error message\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/38d75d74a5626472cd7d1be9705ea8aba29a6b22\"\u003e\u003ccode\u003e38d75d7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3205\"\u003e#3205\u003c/a\u003e from openai/release-please--branches--main--changes-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/ff683ffbeba94fc01d93966b774c05a3471f2495\"\u003e\u003ccode\u003eff683ff\u003c/code\u003e\u003c/a\u003e release: 2.36.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e\u003ccode\u003e8fe0ab8\u003c/code\u003e\u003c/a\u003e feat(api): realtime 2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.17.0...v2.37.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `simplejson` from 3.20.2 to 4.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/simplejson/simplejson/releases\"\u003esimplejson's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Python 2.7 wheel builds for Windows platforms by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/378\"\u003esimplejson/simplejson#378\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.1.0...v4.1.1\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.1.0...v4.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAccelerate indented encoding in the C extension; release 4.1.0 by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/376\"\u003esimplejson/simplejson#376\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.0.1...v4.1.0\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.0.1...v4.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExclude Pyodide wheels from PyPI uploads by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/375\"\u003esimplejson/simplejson#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.0.0...v4.0.1\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.0.0...v4.0.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eVersion 4.0.0 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003esimplejson 4 requires Python 2.7 or Python 3.8+. Older Python\nversions (2.5, 2.6, 3.0-3.7) are no longer supported. pip will\nnot install simplejson 4 on unsupported versions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now uses heap types and per-module state instead of\nstatic types and global state. This is required for free-threading\nsupport and sub-interpreter isolation. The Python-level API is\nunchanged.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFull support for Python 3.13+ free-threading (PEP 703). The C\nextension is now safe to use with the GIL disabled (python3.14t):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eConverted all static types to heap types with per-module state\u003c/li\u003e\n\u003cli\u003eAdded per-object critical sections to scanner and encoder\u003c/li\u003e\n\u003cli\u003eAdded free-threading-safe dict operations for Python 3.13+\u003c/li\u003e\n\u003cli\u003eUnified per-module state management and templated parser\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/363\"\u003esimplejson/simplejson#363\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/364\"\u003esimplejson/simplejson#364\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/365\"\u003esimplejson/simplejson#365\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/367\"\u003esimplejson/simplejson#367\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/369\"\u003esimplejson/simplejson#369\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNumerous C extension memory safety fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix use-after-free and leak in encoder ident handling\u003c/li\u003e\n\u003cli\u003eFix NULL dereferences on OOM in module init and static string init\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/simplejson/simplejson/blob/main/CHANGES.txt\"\u003esimplejson's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eVersion 4.1.1 released 2026-04-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003ebuild_wheels_py27\u003c/code\u003e CI job now also builds Python 2.7 wheels\nfor Windows AMD64 and Windows x86, joining the existing Py2.7\nmanylinux1 / manylinux2010 x86_64 wheels. This unblocks offline /\n\u003ccode\u003e--no-index\u003c/code\u003e installs on Py2.7-on-Windows (the original\nreporter's case), which previously had no matching binary wheel on\nPyPI, fell through to the sdist, and failed on the PEP 517\nisolated-build step complaining that \u003ccode\u003esetuptools\u0026gt;=42\u003c/code\u003e was not in\nthe wheelhouse.\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/377\"\u003esimplejson/simplejson#377\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.1.0 released 2026-04-22\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now accelerates encoding when \u003ccode\u003eindent=\u003c/code\u003e is set.\nPreviously the encoder fell back to the pure-Python implementation\nwhenever a non-None \u003ccode\u003eindent\u003c/code\u003e was passed; now the C encoder emits\nthe newline-plus-indent prefix, the level-aware item separator, and\nthe closing indent directly.  A representative nested-dict workload\nbenchmarks about 4-5x faster end-to-end, and the \u003ccode\u003eindent=0\u003c/code\u003e and\nempty-container edge cases continue to match the Python output\nbyte-for-byte.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now emits PEP 678 \u003ccode\u003eexc.add_note()\u003c/code\u003e annotations on\nserialization failures, matching the pure-Python encoder.  A chained\nerror on \u003ccode\u003e{'a': [1, object(), 3]}\u003c/code\u003e produces the same three notes\n(\u003ccode\u003ewhen serializing object object\u003c/code\u003e, \u003ccode\u003ewhen serializing list item 1\u003c/code\u003e,\n\u003ccode\u003ewhen serializing dict item 'a'\u003c/code\u003e) whether the speedups are loaded\nor not, so the add_note assertions in \u003ccode\u003etest_errors.py\u003c/code\u003e no longer\nneed \u003ccode\u003eindent=2\u003c/code\u003e to force the Python path.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.0.1 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSkip uploading Pyodide/wasm wheels to PyPI, which rejects them with\n\u0026quot;unsupported platform tag 'pyodide_2024_0_wasm32'\u0026quot;. The wheels are\nstill built in CI and preserved as workflow artifacts.\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/375\"\u003esimplejson/simplejson#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.0.0 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003esimplejson 4 requires Python 2.7 or Python 3.8+. Older Python\nversions (2.5, 2.6, 3.0-3.7) are no longer supported. pip will\nnot install simplejson 4 on unsupported versions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now uses heap types and per-module state instead of\nstatic types and global state. This is required for free-threading\nsupport and sub-interpreter isolation. The Python-level API is\nunchanged.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFull support for Python 3.13+ free-threading (PEP 703). The C\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/639b2ee73b2de6b385fcd4d44e0e08054a4d8a0e\"\u003e\u003ccode\u003e639b2ee\u003c/code\u003e\u003c/a\u003e Add Python 2.7 wheel builds for Windows platforms (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/0fd3185ce301bdefe61bbbf510536fa9127962fb\"\u003e\u003ccode\u003e0fd3185\u003c/code\u003e\u003c/a\u003e Accelerate indented encoding in the C extension; release 4.1.0 (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/376\"\u003e#376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/19b5f94f235d3ac11646b82c02f292845b2aa184\"\u003e\u003ccode\u003e19b5f94\u003c/code\u003e\u003c/a\u003e Exclude Pyodide wheels from PyPI uploads (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/375\"\u003e#375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/1608c050bbc2ae67ddfe913dad83bed7d588aa27\"\u003e\u003ccode\u003e1608c05\u003c/code\u003e\u003c/a\u003e Use JSONDecodeError for out-of-range end indices in C scanstring (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/374\"\u003e#374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/3bba17935f12695355b5280df2a93bf963b704dd\"\u003e\u003ccode\u003e3bba179\u003c/code\u003e\u003c/a\u003e Encoder parity fixes (for_json/_asdict) and TSan stress CI job (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/7b22d65b92ac7e69f740f59fe11548216b79c098\"\u003e\u003ccode\u003e7b22d65\u003c/code\u003e\u003c/a\u003e Error parity for the C and Python scanstring in surrogate and truncated strin...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/825100a7fc498dafae31d10bef3e3cfaba1fdc5b\"\u003e\u003ccode\u003e825100a\u003c/code\u003e\u003c/a\u003e Release version 4.0.0: free-threading, CPython json parity, Python 2.7 fixes ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/0dbb9d875127a9009f01a4036fa950b0a5f4f589\"\u003e\u003ccode\u003e0dbb9d8\u003c/code\u003e\u003c/a\u003e C extension: dead code cleanup, fast paths for dict/list/string encoding, cor...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/e2e5f0b2d3bae3fd9a56bbaab42f6d75fb980ad5\"\u003e\u003ccode\u003ee2e5f0b\u003c/code\u003e\u003c/a\u003e Add Python 3.13+ free-threading support to dict operations (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/e817370a91f4f51a0aec5f0f7bdeb1ca601ed101\"\u003e\u003ccode\u003ee817370\u003c/code\u003e\u003c/a\u003e Fix free-threading (3.14t) crashes: heap types, unified per-module state, tem...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/simplejson/simplejson/compare/v3.20.2...v4.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Incre...\n\n_Description has been truncated_","html_url":"https://github.com/RANJITHKUMARJN/opentelemetrymain/pull/208","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/RANJITHKUMARJN%2Fopentelemetrymain/issues/208","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/208/packages"}},{"old_version":"4.0.0","new_version":"4.1.0","update_type":"minor","path":null,"pr_created_at":"2026-05-20T05:12:21.000Z","version_change":"4.0.0 → 4.1.0","issue":{"uuid":"4483350481","node_id":"PR_kwDORxQaNc7dXhAk","number":147,"state":"closed","title":"build(deps): bump the pip-production-dependencies group across 5 directories with 18 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-21T23:42:43.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-20T05:12:21.000Z","updated_at":"2026-05-21T23:42:45.000Z","time_to_close":153022,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"pip-production-dependencies","update_count":18,"packages":[{"name":"grpcio-health-checking","old_version":"1.78.0","new_version":"1.80.0"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.61b0","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.40.0","new_version":"1.42.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"psycopg2-binary","old_version":"2.9.11","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"openai","old_version":"2.26.0","new_version":"2.37.0","repository_url":"https://github.com/openai/openai-python"},{"name":"simplejson","old_version":"3.20.2","new_version":"4.1.1","repository_url":"https://github.com/simplejson/simplejson"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.40.0","new_version":"1.42.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.61b0","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.61b0","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.61b0","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.61b0","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.40.0","new_version":"1.42.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.61b0","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.61b0","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 18 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.26.0` | `2.37.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n\nBumps the pip-production-dependencies group with 2 updates in the /src/llm directory: [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) and [python-json-logger](https://github.com/nhairs/python-json-logger).\nBumps the pip-production-dependencies group with 11 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.61b0` | `0.63b0` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n\nBumps the pip-production-dependencies group with 9 updates in the /src/product-reviews directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.26.0` | `2.37.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n\nBumps the pip-production-dependencies group with 6 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.63b0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.42.0` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n\n\nUpdates `grpcio-health-checking` from 1.78.0 to 1.80.0\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.4.0...openfeature-provider-flagd/v0.4.1\"\u003e0.4.1\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evarious custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003ec119a77\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eflagd:\u003c/strong\u003e extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e1995534\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.3.0...openfeature-provider-flagd/v0.4.0\"\u003e0.4.0\u003c/a\u003e (2026-04-01)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/83c3e48595c0f44b4a3259719a5d85fde987f492\"\u003e83c3e48\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eintroduce list for fatal status codes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/362\"\u003e#362\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/96a88ada622fb7941a1d4d58205ff3342180fa9a\"\u003e96a88ad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.7...openfeature-provider-flagd/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-03-11)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.2.7\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/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/564eb68aa513e6d8b5fb06aa5f632f427b11abe5\"\u003e\u003ccode\u003e564eb68\u003c/code\u003e\u003c/a\u003e fix(security): update dependency pytest to v9.0.3 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.3...openfeature-provider-flagd/v0.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.61b0 to 0.63b0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-distro's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: update auto-instrumentation to re-inject\ninstrumentation path after init\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4469\"\u003e#4469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e: Add Database client operation duration\nand returned rows metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4481\"\u003e#4481\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments\nand add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Use \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e to\nformat and extract each log record's body text to more closely match the\nexpected usage of the logging system. As a result, all OTel log record bodies\nare now always strings. Previously, if \u003ccode\u003eLogRecord.msg\u003c/code\u003e (which contains the\nformat string) was set to a non-string object (e.g.\n\u003ccode\u003elogger.warning(some_dict)\u003c/code\u003e), the object was exported as-is to the OTLP body\nfield. Now, \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e will convert it to to a string. If you\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.40.0 to 1.42.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add propagator plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_propagator\u003c/code\u003e entry point group, matching\nthe spec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5098\"\u003e#5098\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add exporter plugin loading to declarative file\nconfiguration for all three signals (traces, metrics, logs) via the\n\u003ccode\u003eopentelemetry_*_exporter\u003c/code\u003e entry point groups, matching the spec's\nPluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5128\"\u003e#5128\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/85eb40ac3a43a165c22d86919b32c77e74f94e6b\"\u003e\u003ccode\u003e85eb40a\u003c/code\u003e\u003c/a\u003e ci: migrate unreleased changelog entries to towncrier fragments (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5213\"\u003e#5213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/369644cfec249c48ca3aad0a4f6500e52d316689\"\u003e\u003ccode\u003e369644c\u003c/code\u003e\u003c/a\u003e docs: add new example for multi-destination exporting to Sphinx Doc (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5087\"\u003e#5087\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.40.0...v1.42.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.0.0 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.0.0...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.11 to 2.9.12\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWheel package bundled with PostgreSQL 16 libpq in order to add support for\nrecent features, such as \u003ccode\u003esslcertmode\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.7\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix propagation of exceptions raised during module initialization\n(:ticket:\u003ccode\u003e[#1598](https://github.com/psycopg/psycopg2/issues/1598)\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/psycopg/psycopg2/commit/3a6d9d6ddc6b53eaa80b712f5fa6b23abbdc38db\"\u003e\u003ccode\u003e3a6d9d6\u003c/code\u003e\u003c/a\u003e ci: include almalinux in whieel building\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/ebca6bf0f86bc6cbdc86de1eb3a53eaf49966d86\"\u003e\u003ccode\u003eebca6bf\u003c/code\u003e\u003c/a\u003e chore: bump to version 3.9.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/0196f02cc9512df8de3c941f87d27bda98f9f7af\"\u003e\u003ccode\u003e0196f02\u003c/code\u003e\u003c/a\u003e build(deps): bump pypa/cibuildwheel from 3.3.1 to 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d157bdc2235a42dc1742936dbb0f5cfc8e4d2eb7\"\u003e\u003ccode\u003ed157bdc\u003c/code\u003e\u003c/a\u003e build(deps): bump docker/setup-qemu-action from 3 to 4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/7fccc0f5066a40dea530512abbf02621f4182b81\"\u003e\u003ccode\u003e7fccc0f\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/upload-artifact from 6 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d52a61eb2e6095fc1b9891bfcca44ebfac509e55\"\u003e\u003ccode\u003ed52a61e\u003c/code\u003e\u003c/a\u003e chore: bump dependency libraries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/b231d726a01d55e07ec3620b2b82f4a2da37ba62\"\u003e\u003ccode\u003eb231d72\u003c/code\u003e\u003c/a\u003e chore: fix building binary images\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/6d76e8479f0f522c2e07ce0e2701030d8fd63785\"\u003e\u003ccode\u003e6d76e84\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg2/issues/1836\"\u003e#1836\u003c/a\u003e from psycopg/fix-1835\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f7e314c7ab418ab9b9956e694956089a49c5c3b9\"\u003e\u003ccode\u003ef7e314c\u003c/code\u003e\u003c/a\u003e fix: overflow in malformed interval\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/eb905c124b75f2a5183d22177b85af20914b0f17\"\u003e\u003ccode\u003eeb905c1\u003c/code\u003e\u003c/a\u003e docs: replace bare except clause with except Exception\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.11...2.9.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.26.0 to 2.37.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.37.0\u003c/h2\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\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 add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.36.0\u003c/h2\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.35.1\u003c/h2\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix imagegen \u003ccode\u003esize\u003c/code\u003e enum regression (\u003ca href=\"https://github.com/openai/openai-python/commit/44846536bc3b02c393daa5bae70a85de04c7f621\"\u003e4484653\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.35.0\u003c/h2\u003e\n\u003ch2\u003e2.35.0 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.34.0...v2.35.0\"\u003ev2.34.0...v2.35.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update image 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/0ba55d7569565045426e1587906a70d5682a4bba\"\u003e0ba55d7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/72bf67acbc9f030c20db3d5a1a74ea6d67d55f51\"\u003e72bf67a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove legacy python cli (\u003ca href=\"https://github.com/openai/openai-python/commit/32f36e447d02c3124af8ab48fcc3537df2fed66e\"\u003e32f36e4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erename legacy python cli entrypoint (\u003ca href=\"https://github.com/openai/openai-python/commit/a3b182d6d2c2e6fe1d53ca7550b2d43e0f8b2cd3\"\u003ea3b182d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\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 add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix imagegen \u003ccode\u003esize\u003c/code\u003e enum regression (\u003ca href=\"https://github.com/openai/openai-python/commit/44846536bc3b02c393daa5bae70a85de04c7f621\"\u003e4484653\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.35.0 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.34.0...v2.35.0\"\u003ev2.34.0...v2.35.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update image 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/0ba55d7569565045426e1587906a70d5682a4bba\"\u003e0ba55d7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/72bf67acbc9f030c20db3d5a1a74ea6d67d55f51\"\u003e72bf67a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove legacy python cli (\u003ca href=\"https://github.com/openai/openai-python/commit/32f36e447d02c3124af8ab48fcc3537df2fed66e\"\u003e32f36e4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erename legacy python cli entrypoint (\u003ca href=\"https://github.com/openai/openai-python/commit/a3b182d6d2c2e6fe1d53ca7550b2d43e0f8b2cd3\"\u003ea3b182d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/658be644f48028ea3c7b1545034470fda75a70ba\"\u003e\u003ccode\u003e658be64\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3213\"\u003e#3213\u003c/a\u003e from openai/release-please--branches--main--changes-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8a7cac34cbc64fe02854beb3659f4bb5f46815f9\"\u003e\u003ccode\u003e8a7cac3\u003c/code\u003e\u003c/a\u003e release: 2.37.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/9b4bf8edbac6aab217f1ac4436a47cbca2cad43b\"\u003e\u003ccode\u003e9b4bf8e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/1903\"\u003e#1903\u003c/a\u003e from stainless-sdks/dev/jtian/remove-unnecessary-params\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003e\u003ccode\u003ec39ea8d\u003c/code\u003e\u003c/a\u003e feat: Remove unnecessary client_id when using workload identity provider for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e\u003ccode\u003e7e527bc\u003c/code\u003e\u003c/a\u003e feat(internal/types): support eagerly validating pydantic iterators\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e\u003ccode\u003e625827c\u003c/code\u003e\u003c/a\u003e feat(api): add service_tier parameter to responses compact method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003e\u003ccode\u003ec85ebd9\u003c/code\u003e\u003c/a\u003e fix(client): add missing f-string prefix in file type error message\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/38d75d74a5626472cd7d1be9705ea8aba29a6b22\"\u003e\u003ccode\u003e38d75d7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3205\"\u003e#3205\u003c/a\u003e from openai/release-please--branches--main--changes-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/ff683ffbeba94fc01d93966b774c05a3471f2495\"\u003e\u003ccode\u003eff683ff\u003c/code\u003e\u003c/a\u003e release: 2.36.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e\u003ccode\u003e8fe0ab8\u003c/code\u003e\u003c/a\u003e feat(api): realtime 2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.26.0...v2.37.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `simplejson` from 3.20.2 to 4.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/simplejson/simplejson/releases\"\u003esimplejson's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Python 2.7 wheel builds for Windows platforms by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/378\"\u003esimplejson/simplejson#378\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.1.0...v4.1.1\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.1.0...v4.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAccelerate indented encoding in the C extension; release 4.1.0 by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/376\"\u003esimplejson/simplejson#376\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.0.1...v4.1.0\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.0.1...v4.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExclude Pyodide wheels from PyPI uploads by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/375\"\u003esimplejson/simplejson#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.0.0...v4.0.1\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.0.0...v4.0.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eVersion 4.0.0 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003esimplejson 4 requires Python 2.7 or Python 3.8+. Older Python\nversions (2.5, 2.6, 3.0-3.7) are no longer supported. pip will\nnot install simplejson 4 on unsupported versions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now uses heap types and per-module state instead of\nstatic types and global state. This is required for free-threading\nsupport and sub-interpreter isolation. The Python-level API is\nunchanged.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFull support for Python 3.13+ free-threading (PEP 703). The C\nextension is now safe to use with the GIL disabled (python3.14t):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eConverted all static types to heap types with per-module state\u003c/li\u003e\n\u003cli\u003eAdded per-object critical sections to scanner and encoder\u003c/li\u003e\n\u003cli\u003eAdded free-threading-safe dict operations for Python 3.13+\u003c/li\u003e\n\u003cli\u003eUnified per-module state management and templated parser\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/363\"\u003esimplejson/simplejson#363\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/364\"\u003esimplejson/simplejson#364\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/365\"\u003esimplejson/simplejson#365\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/367\"\u003esimplejson/simplejson#367\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/369\"\u003esimplejson/simplejson#369\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNumerous C extension memory safety fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix use-after-free and leak in encoder ident handling\u003c/li\u003e\n\u003cli\u003eFix NULL dereferences on OOM in module init and static string init\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/simplejson/simplejson/blob/main/CHANGES.txt\"\u003esimplejson's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eVersion 4.1.1 released 2026-04-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003ebuild_wheels_py27\u003c/code\u003e CI job now also builds Python 2.7 wheels\nfor Windows AMD64 and Windows x86, joining the existing Py2.7\nmanylinux1 / manylinux2010 x86_64 wheels. This unblocks offline /\n\u003ccode\u003e--no-index\u003c/code\u003e installs on Py2.7-on-Windows (the original\nreporter's case), which previously had no matching binary wheel on\nPyPI, fell through to the sdist, and failed on the PEP 517\nisolated-build step complaining that \u003ccode\u003esetuptools\u0026gt;=42\u003c/code\u003e was not in\nthe wheelhouse.\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/377\"\u003esimplejson/simplejson#377\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.1.0 released 2026-04-22\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now accelerates encoding when \u003ccode\u003eindent=\u003c/code\u003e is set.\nPreviously the encoder fell back to the pure-Python implementation\nwhenever a non-None \u003ccode\u003eindent\u003c/code\u003e was passed; now the C encoder emits\nthe newline-plus-indent prefix, the level-aware item separator, and\nthe closing indent directly.  A representative nested-dict workload\nbenchmarks about 4-5x faster end-to-end, and the \u003ccode\u003eindent=0\u003c/code\u003e and\nempty-container edge cases continue to match the Python output\nbyte-for-byte.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now emits PEP 678 \u003ccode\u003eexc.add_note()\u003c/code\u003e annotations on\nserialization failures, matching the pure-Python encoder.  A chained\nerror on \u003ccode\u003e{'a': [1, object(), 3]}\u003c/code\u003e produces the same three notes\n(\u003ccode\u003ewhen serializing object object\u003c/code\u003e, \u003ccode\u003ewhen serializing list item 1\u003c/code\u003e,\n\u003ccode\u003ewhen serializing dict item 'a'\u003c/code\u003e) whether the speedups are loaded\nor not, so the add_note assertions in \u003ccode\u003etest_errors.py\u003c/code\u003e no longer\nneed \u003ccode\u003eindent=2\u003c/code\u003e to force the Python path.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.0.1 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSkip uploading Pyodide/wasm wheels to PyPI, which rejects them with\n\u0026quot;unsupported platform tag 'pyodide_2024_0_wasm32'\u0026quot;. The wheels are\nstill built in CI and preserved as workflow artifacts.\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/375\"\u003esimplejson/simplejson#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.0.0 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003esimplejson 4 requires Python 2.7 or Python 3.8+. Older Python\nversions (2.5, 2.6, 3.0-3.7) are no longer supported. pip will\nnot install simplejson 4 on unsupported versions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now uses heap types and per-module state instead of\nstatic types and global state. This is required for free-threading\nsupport and sub-interpreter isolation. The Python-level API is\nunchanged.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFull support for Python 3.13+ free-threading (PEP 703). The C\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/639b2ee73b2de6b385fcd4d44e0e08054a4d8a0e\"\u003e\u003ccode\u003e639b2ee\u003c/code\u003e\u003c/a\u003e Add Python 2.7 wheel builds for Windows platforms (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/0fd3185ce301bdefe61bbbf510536fa9127962fb\"\u003e\u003ccode\u003e0fd3185\u003c/code\u003e\u003c/a\u003e Accelerate indented encoding in the C extension; release 4.1.0 (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/376\"\u003e#376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/19b5f94f235d3ac11646b82c02f292845b2aa184\"\u003e\u003ccode\u003e19b5f94\u003c/code\u003e\u003c/a\u003e Exclude Pyodide wheels from PyPI uploads (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/375\"\u003e#375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/1608c050bbc2ae67ddfe913dad83bed7d588aa27\"\u003e\u003ccode\u003e1608c05\u003c/code\u003e\u003c/a\u003e Use JSONDecodeError for out-of-range end indices in C scanstring (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/374\"\u003e#374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/3bba17935f12695355b5280df2a93bf963b704dd\"\u003e\u003ccode\u003e3bba179\u003c/code\u003e\u003c/a\u003e Encoder parity fixes (for_json/_asdict) and TSan stress CI job (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/7b22d65b92ac7e69f740f59fe11548216b79c098\"\u003e\u003ccode\u003e7b22d65\u003c/code\u003e\u003c/a\u003e Error parity for the C and Python scanstring in surrogate and truncated strin...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/825100a7fc498dafae31d10bef3e3cfaba1fdc5b\"\u003e\u003ccode\u003e825100a\u003c/code\u003e\u003c/a\u003e Release version 4.0.0: free-threading, CPython json parity, Python 2.7 fixes ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/0dbb9d875127a9009f01a4036fa950b0a5f4f589\"\u003e\u003ccode\u003e0dbb9d8\u003c/code\u003e\u003c/a\u003e C extension: dead code cleanup, fast paths for dict/list/string encoding, cor...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/e2e5f0b2d3bae3fd9a56bbaab42f6d75fb980ad5\"\u003e\u003ccode\u003ee2e5f0b\u003c/code\u003e\u003c/a\u003e Add Python 3.13+ free-threading support to dict operations (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/e817370a91f4f51a0aec5f0f7bdeb1ca601ed101\"\u003e\u003ccode\u003ee817370\u003c/code\u003e\u003c/a\u003e Fix free-threading (3.14t) crashes: heap types, unified per-module state, tem...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/simplejson/simplejson/compare/v3.20.2...v4.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.2.0 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.40.0 to 1.42.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add propagator plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_propagator\u003c/code\u003e entry point group, matching\nthe spec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5098\"\u003e#5098\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add exporter plugin loading to declarative file\nconfiguration for all three signals (traces, metrics, logs) via the\n\u003ccode\u003eopentelemetry_*_exporter\u003c/code\u003e entry point groups, matching the spec's\nPluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5128\"\u003e#5128\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/85eb40ac3a43a165c22d86919b32c77e74f94e6b\"\u003e\u003ccode\u003e85eb40a\u003c/code\u003e\u003c/a\u003e ci: migrate unreleased changelog entries to towncrier fragments (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5213\"\u003e#5213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/369644cfec249c48ca3aad0a4f6500e52d316689\"\u003e\u003ccode\u003e369644c\u003c/code\u003e\u003c/a\u003e docs: add new example for multi-destination exporting to Sphinx Doc (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5087\"\u003e#5087\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.40.0...v1.42.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-jinja2` from 0.61b0 to 0.63b0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-jinja2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288...\n\n_Description has been truncated_","html_url":"https://github.com/GuanceDemo/OpenTelemetry_Demo/pull/147","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuanceDemo%2FOpenTelemetry_Demo/issues/147","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/147/packages"}},{"old_version":"4.0.0","new_version":"4.1.0","update_type":"minor","path":null,"pr_created_at":"2026-05-19T18:25:02.000Z","version_change":"4.0.0 → 4.1.0","issue":{"uuid":"4479950861","node_id":"PR_kwDORn2jFc7dMmNk","number":125,"state":"closed","title":"Bump the pip-production-dependencies group across 5 directories with 21 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-22T05:44:42.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-19T18:25:02.000Z","updated_at":"2026-05-22T05:44:44.000Z","time_to_close":213580,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-production-dependencies","update_count":21,"packages":[{"name":"grpcio-health-checking","old_version":"1.78.0","new_version":"1.80.0"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.3.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.60b1","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.39.1","new_version":"1.42.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-dotenv","old_version":"1.2.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"psycopg2-binary","old_version":"2.9.11","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"openai","old_version":"2.17.0","new_version":"2.37.0","repository_url":"https://github.com/openai/openai-python"},{"name":"simplejson","old_version":"3.20.2","new_version":"4.1.1","repository_url":"https://github.com/simplejson/simplejson"},{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.39.1","new_version":"1.42.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.60b1","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.60b1","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.60b1","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.60b1","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.39.1","new_version":"1.42.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.60b1","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.60b1","new_version":"0.63b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 21 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.17.0` | `2.37.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n\nBumps the pip-production-dependencies group with 4 updates in the /src/llm directory: [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib), [python-dotenv](https://github.com/theskumar/python-dotenv), [python-json-logger](https://github.com/nhairs/python-json-logger) and [flask](https://github.com/pallets/flask).\nBumps the pip-production-dependencies group with 13 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.60b1` | `0.63b0` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n\nBumps the pip-production-dependencies group with 11 updates in the /src/product-reviews directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.17.0` | `2.37.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n\nBumps the pip-production-dependencies group with 8 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.63b0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.42.0` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n\n\nUpdates `grpcio-health-checking` from 1.78.0 to 1.80.0\n\nUpdates `openfeature-hooks-opentelemetry` from 0.3.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.4.0...openfeature-provider-flagd/v0.4.1\"\u003e0.4.1\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evarious custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003ec119a77\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eflagd:\u003c/strong\u003e extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e1995534\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.3.0...openfeature-provider-flagd/v0.4.0\"\u003e0.4.0\u003c/a\u003e (2026-04-01)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/83c3e48595c0f44b4a3259719a5d85fde987f492\"\u003e83c3e48\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eintroduce list for fatal status codes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/362\"\u003e#362\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/96a88ada622fb7941a1d4d58205ff3342180fa9a\"\u003e96a88ad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.7...openfeature-provider-flagd/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-03-11)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.2.7\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/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/564eb68aa513e6d8b5fb06aa5f632f427b11abe5\"\u003e\u003ccode\u003e564eb68\u003c/code\u003e\u003c/a\u003e fix(security): update dependency pytest to v9.0.3 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.3...openfeature-provider-flagd/v0.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.60b1 to 0.63b0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.39.1 to 1.42.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.42.0/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add propagator plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_propagator\u003c/code\u003e entry point group, matching\nthe spec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5098\"\u003e#5098\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add exporter plugin loading to declarative file\nconfiguration for all three signals (traces, metrics, logs) via the\n\u003ccode\u003eopentelemetry_*_exporter\u003c/code\u003e entry point groups, matching the spec's\nPluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5128\"\u003e#5128\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/85eb40ac3a43a165c22d86919b32c77e74f94e6b\"\u003e\u003ccode\u003e85eb40a\u003c/code\u003e\u003c/a\u003e ci: migrate unreleased changelog entries to towncrier fragments (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5213\"\u003e#5213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/369644cfec249c48ca3aad0a4f6500e52d316689\"\u003e\u003ccode\u003e369644c\u003c/code\u003e\u003c/a\u003e docs: add new example for multi-destination exporting to Sphinx Doc (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5087\"\u003e#5087\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.39.1...v1.42.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.0.0 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.0.0...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.2.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cpackham-atlnz\"\u003e\u003ccode\u003e@​cpackham-atlnz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/597\"\u003etheskumar/python-dotenv#597\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/36004e0e34be7665ff2b11a8a4005144f76f176d\"\u003e\u003ccode\u003e36004e0\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.1 → 1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/eb202520e5933c9daf42501e1e42fdb0144002c8\"\u003e\u003ccode\u003eeb20252\u003c/code\u003e\u003c/a\u003e docs: update changelog for v1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e\u003ccode\u003e790c5c0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/43340da220fb4ca4f95357bbe21a3c7f8f1278b1\"\u003e\u003ccode\u003e43340da\u003c/code\u003e\u003c/a\u003e Remove the use of \u003ccode\u003esh\u003c/code\u003e in tests (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/09d7cee32459e7abdcb5c9d8122a552589c06a9c\"\u003e\u003ccode\u003e09d7cee\u003c/code\u003e\u003c/a\u003e docs: clarify override behavior and document FIFO support (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/c8de2887c00198c22842c5ae5e92d1747467363c\"\u003e\u003ccode\u003ec8de288\u003c/code\u003e\u003c/a\u003e ci: improve workflow efficiency with best practices (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/609\"\u003e#609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/7bd9e3dbfedc0983ad7d56d5570013035242bdf4\"\u003e\u003ccode\u003e7bd9e3d\u003c/code\u003e\u003c/a\u003e Add Windows testing to CI (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/1baaf04f336072e0ee324d5df9563ec767f14f81\"\u003e\u003ccode\u003e1baaf04\u003c/code\u003e\u003c/a\u003e Drop Python 3.9 support and update to PyPy 3.11 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a22cf8993804aeede0c20b75bb1a29d3a99e9dc\"\u003e\u003ccode\u003e4a22cf8\u003c/code\u003e\u003c/a\u003e ci: enable testing on Python 3.14t (free-threaded) (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e2e8e776b42e382ae38b44d3982dd649e7507dd4\"\u003e\u003ccode\u003ee2e8e77\u003c/code\u003e\u003c/a\u003e Fix license specifier (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.11 to 2.9.12\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWheel package bundled with PostgreSQL 16 libpq in order to add support for\nrecent features, such as \u003ccode\u003esslcertmode\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.7\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix propagation of exceptions raised during module initialization\n(:ticket:\u003ccode\u003e[#1598](https://github.com/psycopg/psycopg2/issues/1598)\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/psycopg/psycopg2/commit/3a6d9d6ddc6b53eaa80b712f5fa6b23abbdc38db\"\u003e\u003ccode\u003e3a6d9d6\u003c/code\u003e\u003c/a\u003e ci: include almalinux in whieel building\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/ebca6bf0f86bc6cbdc86de1eb3a53eaf49966d86\"\u003e\u003ccode\u003eebca6bf\u003c/code\u003e\u003c/a\u003e chore: bump to version 3.9.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/0196f02cc9512df8de3c941f87d27bda98f9f7af\"\u003e\u003ccode\u003e0196f02\u003c/code\u003e\u003c/a\u003e build(deps): bump pypa/cibuildwheel from 3.3.1 to 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d157bdc2235a42dc1742936dbb0f5cfc8e4d2eb7\"\u003e\u003ccode\u003ed157bdc\u003c/code\u003e\u003c/a\u003e build(deps): bump docker/setup-qemu-action from 3 to 4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/7fccc0f5066a40dea530512abbf02621f4182b81\"\u003e\u003ccode\u003e7fccc0f\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/upload-artifact from 6 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d52a61eb2e6095fc1b9891bfcca44ebfac509e55\"\u003e\u003ccode\u003ed52a61e\u003c/code\u003e\u003c/a\u003e chore: bump dependency libraries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/b231d726a01d55e07ec3620b2b82f4a2da37ba62\"\u003e\u003ccode\u003eb231d72\u003c/code\u003e\u003c/a\u003e chore: fix building binary images\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/6d76e8479f0f522c2e07ce0e2701030d8fd63785\"\u003e\u003ccode\u003e6d76e84\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg2/issues/1836\"\u003e#1836\u003c/a\u003e from psycopg/fix-1835\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f7e314c7ab418ab9b9956e694956089a49c5c3b9\"\u003e\u003ccode\u003ef7e314c\u003c/code\u003e\u003c/a\u003e fix: overflow in malformed interval\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/eb905c124b75f2a5183d22177b85af20914b0f17\"\u003e\u003ccode\u003eeb905c1\u003c/code\u003e\u003c/a\u003e docs: replace bare except clause with except Exception\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.11...2.9.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.17.0 to 2.37.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.37.0\u003c/h2\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\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 add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.36.0\u003c/h2\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.35.1\u003c/h2\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix imagegen \u003ccode\u003esize\u003c/code\u003e enum regression (\u003ca href=\"https://github.com/openai/openai-python/commit/44846536bc3b02c393daa5bae70a85de04c7f621\"\u003e4484653\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.35.0\u003c/h2\u003e\n\u003ch2\u003e2.35.0 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.34.0...v2.35.0\"\u003ev2.34.0...v2.35.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update image 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/0ba55d7569565045426e1587906a70d5682a4bba\"\u003e0ba55d7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/72bf67acbc9f030c20db3d5a1a74ea6d67d55f51\"\u003e72bf67a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove legacy python cli (\u003ca href=\"https://github.com/openai/openai-python/commit/32f36e447d02c3124af8ab48fcc3537df2fed66e\"\u003e32f36e4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erename legacy python cli entrypoint (\u003ca href=\"https://github.com/openai/openai-python/commit/a3b182d6d2c2e6fe1d53ca7550b2d43e0f8b2cd3\"\u003ea3b182d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\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 add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix imagegen \u003ccode\u003esize\u003c/code\u003e enum regression (\u003ca href=\"https://github.com/openai/openai-python/commit/44846536bc3b02c393daa5bae70a85de04c7f621\"\u003e4484653\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.35.0 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.34.0...v2.35.0\"\u003ev2.34.0...v2.35.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update image 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/0ba55d7569565045426e1587906a70d5682a4bba\"\u003e0ba55d7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/72bf67acbc9f030c20db3d5a1a74ea6d67d55f51\"\u003e72bf67a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove legacy python cli (\u003ca href=\"https://github.com/openai/openai-python/commit/32f36e447d02c3124af8ab48fcc3537df2fed66e\"\u003e32f36e4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erename legacy python cli entrypoint (\u003ca href=\"https://github.com/openai/openai-python/commit/a3b182d6d2c2e6fe1d53ca7550b2d43e0f8b2cd3\"\u003ea3b182d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/658be644f48028ea3c7b1545034470fda75a70ba\"\u003e\u003ccode\u003e658be64\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3213\"\u003e#3213\u003c/a\u003e from openai/release-please--branches--main--changes-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8a7cac34cbc64fe02854beb3659f4bb5f46815f9\"\u003e\u003ccode\u003e8a7cac3\u003c/code\u003e\u003c/a\u003e release: 2.37.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/9b4bf8edbac6aab217f1ac4436a47cbca2cad43b\"\u003e\u003ccode\u003e9b4bf8e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/1903\"\u003e#1903\u003c/a\u003e from stainless-sdks/dev/jtian/remove-unnecessary-params\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003e\u003ccode\u003ec39ea8d\u003c/code\u003e\u003c/a\u003e feat: Remove unnecessary client_id when using workload identity provider for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e\u003ccode\u003e7e527bc\u003c/code\u003e\u003c/a\u003e feat(internal/types): support eagerly validating pydantic iterators\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e\u003ccode\u003e625827c\u003c/code\u003e\u003c/a\u003e feat(api): add service_tier parameter to responses compact method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003e\u003ccode\u003ec85ebd9\u003c/code\u003e\u003c/a\u003e fix(client): add missing f-string prefix in file type error message\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/38d75d74a5626472cd7d1be9705ea8aba29a6b22\"\u003e\u003ccode\u003e38d75d7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3205\"\u003e#3205\u003c/a\u003e from openai/release-please--branches--main--changes-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/ff683ffbeba94fc01d93966b774c05a3471f2495\"\u003e\u003ccode\u003eff683ff\u003c/code\u003e\u003c/a\u003e release: 2.36.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e\u003ccode\u003e8fe0ab8\u003c/code\u003e\u003c/a\u003e feat(api): realtime 2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.17.0...v2.37.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `simplejson` from 3.20.2 to 4.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/simplejson/simplejson/releases\"\u003esimplejson's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Python 2.7 wheel builds for Windows platforms by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/378\"\u003esimplejson/simplejson#378\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.1.0...v4.1.1\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.1.0...v4.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAccelerate indented encoding in the C extension; release 4.1.0 by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/376\"\u003esimplejson/simplejson#376\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.0.1...v4.1.0\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.0.1...v4.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExclude Pyodide wheels from PyPI uploads by \u003ca href=\"https://github.com/etrepum\"\u003e\u003ccode\u003e@​etrepum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/375\"\u003esimplejson/simplejson#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/simplejson/simplejson/compare/v4.0.0...v4.0.1\"\u003ehttps://github.com/simplejson/simplejson/compare/v4.0.0...v4.0.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eVersion 4.0.0 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003esimplejson 4 requires Python 2.7 or Python 3.8+. Older Python\nversions (2.5, 2.6, 3.0-3.7) are no longer supported. pip will\nnot install simplejson 4 on unsupported versions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now uses heap types and per-module state instead of\nstatic types and global state. This is required for free-threading\nsupport and sub-interpreter isolation. The Python-level API is\nunchanged.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFull support for Python 3.13+ free-threading (PEP 703). The C\nextension is now safe to use with the GIL disabled (python3.14t):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eConverted all static types to heap types with per-module state\u003c/li\u003e\n\u003cli\u003eAdded per-object critical sections to scanner and encoder\u003c/li\u003e\n\u003cli\u003eAdded free-threading-safe dict operations for Python 3.13+\u003c/li\u003e\n\u003cli\u003eUnified per-module state management and templated parser\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/363\"\u003esimplejson/simplejson#363\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/364\"\u003esimplejson/simplejson#364\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/365\"\u003esimplejson/simplejson#365\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/367\"\u003esimplejson/simplejson#367\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/369\"\u003esimplejson/simplejson#369\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNumerous C extension memory safety fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix use-after-free and leak in encoder ident handling\u003c/li\u003e\n\u003cli\u003eFix NULL dereferences on OOM in module init and static string init\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/simplejson/simplejson/blob/main/CHANGES.txt\"\u003esimplejson's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eVersion 4.1.1 released 2026-04-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003ebuild_wheels_py27\u003c/code\u003e CI job now also builds Python 2.7 wheels\nfor Windows AMD64 and Windows x86, joining the existing Py2.7\nmanylinux1 / manylinux2010 x86_64 wheels. This unblocks offline /\n\u003ccode\u003e--no-index\u003c/code\u003e installs on Py2.7-on-Windows (the original\nreporter's case), which previously had no matching binary wheel on\nPyPI, fell through to the sdist, and failed on the PEP 517\nisolated-build step complaining that \u003ccode\u003esetuptools\u0026gt;=42\u003c/code\u003e was not in\nthe wheelhouse.\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/377\"\u003esimplejson/simplejson#377\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.1.0 released 2026-04-22\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now accelerates encoding when \u003ccode\u003eindent=\u003c/code\u003e is set.\nPreviously the encoder fell back to the pure-Python implementation\nwhenever a non-None \u003ccode\u003eindent\u003c/code\u003e was passed; now the C encoder emits\nthe newline-plus-indent prefix, the level-aware item separator, and\nthe closing indent directly.  A representative nested-dict workload\nbenchmarks about 4-5x faster end-to-end, and the \u003ccode\u003eindent=0\u003c/code\u003e and\nempty-container edge cases continue to match the Python output\nbyte-for-byte.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now emits PEP 678 \u003ccode\u003eexc.add_note()\u003c/code\u003e annotations on\nserialization failures, matching the pure-Python encoder.  A chained\nerror on \u003ccode\u003e{'a': [1, object(), 3]}\u003c/code\u003e produces the same three notes\n(\u003ccode\u003ewhen serializing object object\u003c/code\u003e, \u003ccode\u003ewhen serializing list item 1\u003c/code\u003e,\n\u003ccode\u003ewhen serializing dict item 'a'\u003c/code\u003e) whether the speedups are loaded\nor not, so the add_note assertions in \u003ccode\u003etest_errors.py\u003c/code\u003e no longer\nneed \u003ccode\u003eindent=2\u003c/code\u003e to force the Python path.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.0.1 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSkip uploading Pyodide/wasm wheels to PyPI, which rejects them with\n\u0026quot;unsupported platform tag 'pyodide_2024_0_wasm32'\u0026quot;. The wheels are\nstill built in CI and preserved as workflow artifacts.\n\u003ca href=\"https://redirect.github.com/simplejson/simplejson/pull/375\"\u003esimplejson/simplejson#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVersion 4.0.0 released 2026-04-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003esimplejson 4 requires Python 2.7 or Python 3.8+. Older Python\nversions (2.5, 2.6, 3.0-3.7) are no longer supported. pip will\nnot install simplejson 4 on unsupported versions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe C extension now uses heap types and per-module state instead of\nstatic types and global state. This is required for free-threading\nsupport and sub-interpreter isolation. The Python-level API is\nunchanged.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFull support for Python 3.13+ free-threading (PEP 703). The C\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/639b2ee73b2de6b385fcd4d44e0e08054a4d8a0e\"\u003e\u003ccode\u003e639b2ee\u003c/code\u003e\u003c/a\u003e Add Python 2.7 wheel builds for Windows platforms (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/0fd3185ce301bdefe61bbbf510536fa9127962fb\"\u003e\u003ccode\u003e0fd3185\u003c/code\u003e\u003c/a\u003e Accelerate indented encoding in the C extension; release 4.1.0 (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/376\"\u003e#376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/19b5f94f235d3ac11646b82c02f292845b2aa184\"\u003e\u003ccode\u003e19b5f94\u003c/code\u003e\u003c/a\u003e Exclude Pyodide wheels from PyPI uploads (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/375\"\u003e#375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/1608c050bbc2ae67ddfe913dad83bed7d588aa27\"\u003e\u003ccode\u003e1608c05\u003c/code\u003e\u003c/a\u003e Use JSONDecodeError for out-of-range end indices in C scanstring (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/374\"\u003e#374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/3bba17935f12695355b5280df2a93bf963b704dd\"\u003e\u003ccode\u003e3bba179\u003c/code\u003e\u003c/a\u003e Encoder parity fixes (for_json/_asdict) and TSan stress CI job (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/7b22d65b92ac7e69f740f59fe11548216b79c098\"\u003e\u003ccode\u003e7b22d65\u003c/code\u003e\u003c/a\u003e Error parity for the C and Python scanstring in surrogate and truncated strin...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/825100a7fc498dafae31d10bef3e3cfaba1fdc5b\"\u003e\u003ccode\u003e825100a\u003c/code\u003e\u003c/a\u003e Release version 4.0.0: free-threading, CPython json parity, Python 2.7 fixes ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/0dbb9d875127a9009f01a4036fa950b0a5f4f589\"\u003e\u003ccode\u003e0dbb9d8\u003c/code\u003e\u003c/a\u003e C extension: dead code cleanup, fast paths for dict/list/string encoding, cor...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/e2e5f0b2d3bae3fd9a56bbaab42f6d75fb980ad5\"\u003e\u003ccode\u003ee2e5f0b\u003c/code\u003e\u003c/a\u003e Add Python 3.13+ free-threading support to dict operations (\u003ca href=\"https://redirect.github.com/simplejson/simplejson/issues/369\"\u003e#369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/simplejson/simplejson/commit/e817370a91f4f51a0aec5f0f7bdeb1ca601ed101\"\u003e\u003ccode\u003ee817370\u003c/code\u003e\u003c/a\u003e Fix free-threading (3.14t) crashes: heap types, unified per-module state, tem...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/simplejson/simplejson/compare/v3.20.2...v4.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/...\n\n_Description has been truncated_","html_url":"https://github.com/brianlangbecker/opentelemetry-demo-ld/pull/125","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/brianlangbecker%2Fopentelemetry-demo-ld/issues/125","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/125/packages"}},{"old_version":"2.0.7","new_version":"4.1.0","update_type":"major","path":null,"pr_created_at":"2026-05-15T11:41:58.000Z","version_change":"2.0.7 → 4.1.0","issue":{"uuid":"4453610885","node_id":"PR_kwDORYW3fc7b5gKB","number":12,"state":"closed","title":"Bump python-json-logger from 2.0.7 to 4.1.0","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-28T00:26:03.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-15T11:41:58.000Z","updated_at":"2026-05-28T00:26:12.000Z","time_to_close":1082645,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"python-json-logger","old_version":"2.0.7","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":null,"ecosystem":"pip"},"body":"Bumps [python-json-logger](https://github.com/nhairs/python-json-logger) from 2.0.7 to 4.1.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.0.rc1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0.rc1\"\u003e4.0.0.rc1\u003c/a\u003e - 2025-09-07\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.0...v3.2.1\"\u003e3.2.1\u003c/a\u003e - 2024-12-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImport error on \u003ccode\u003eimport pythonjsonlogger.jsonlogger\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/29\"\u003e#29\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/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v2.0.7...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n","html_url":"https://github.com/NextApple-Bot/telegram-bot/pull/12","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/NextApple-Bot%2Ftelegram-bot/issues/12","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/12/packages"}},{"old_version":"4.0.0","new_version":"4.1.0","update_type":"minor","path":null,"pr_created_at":"2026-05-12T07:25:45.000Z","version_change":"4.0.0 → 4.1.0","issue":{"uuid":"4427081441","node_id":"PR_kwDOQkhN-M7akNst","number":247,"state":"closed","title":"Bump the pip-production-dependencies group across 9 directories with 23 updates","user":"dependabot[bot]","labels":["dependencies","python","helm-update-required"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-14T02:21:51.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-12T07:25:45.000Z","updated_at":"2026-05-14T02:21:52.000Z","time_to_close":154566,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-production-dependencies","update_count":23,"packages":[{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.2.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.38.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.38.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.59b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.59b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.59b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.59b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.38.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [flask](https://github.com/pallets/flask), [python-json-logger](https://github.com/nhairs/python-json-logger), [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib), [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib), [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib), [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib), [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib), [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib), [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib), [grpcio-health-checking](https://grpc.io), [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib), [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib), [psutil](https://github.com/giampaolo/psutil), [python-dotenv](https://github.com/theskumar/python-dotenv), [psycopg2-binary](https://github.com/psycopg/psycopg2), [openai](https://github.com/openai/openai-python), [simplejson](https://github.com/simplejson/simplejson), [requests](https://github.com/psf/requests) and [google-generativeai](https://github.com/google/generative-ai-python) to permit the latest version.\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.2...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.2.0 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-hooks-opentelemetry` from 0.2.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emigrate to uv (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/293\"\u003e#293\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/9590554be4c8a7f77b0c0f20d6b48076c9870f52\"\u003e9590554\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate opentelemetry hook to latest version of semantic conventions (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/326\"\u003e#326\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a2ec682a709a4721f8362cfa6a9e6037937761ee\"\u003ea2ec682\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.2.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.38.0 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.38.0...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.38.0 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.38.0...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-jinja2` from 0.59b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-jinja2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler utility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in \u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a \u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-requests` from 0.59b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-requests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler utility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in \u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a \u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-system-metrics` from 0.59b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-system-metrics's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler utility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in \u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a \u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-urllib3` from 0.59b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-urllib3's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler utility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in \u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a \u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-sdk` from 1.38.0 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcop...\n\n_Description has been truncated_","html_url":"https://github.com/DangThanhWang/test_monitor/pull/247","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/DangThanhWang%2Ftest_monitor/issues/247","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/247/packages"}},{"old_version":"4.0.0","new_version":"4.1.0","update_type":"minor","path":"/src/emailservice","pr_created_at":"2026-05-09T13:37:44.000Z","version_change":"4.0.0 → 4.1.0","issue":{"uuid":"4412661938","node_id":"PR_kwDOR95XKc7Z2jzD","number":51,"state":"closed","title":"chore(deps): bump python-json-logger from 4.0.0 to 4.1.0 in /src/emailservice","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-10T01:25:08.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-09T13:37:44.000Z","updated_at":"2026-05-10T01:25:10.000Z","time_to_close":42444,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":"/src/emailservice","ecosystem":"pip"},"body":"Bumps [python-json-logger](https://github.com/nhairs/python-json-logger) from 4.0.0 to 4.1.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e","html_url":"https://github.com/however-yir/however-microservices-lab/pull/51","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/however-yir%2Fhowever-microservices-lab/issues/51","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/51/packages"}},{"old_version":"4.0.0","new_version":"4.1.0","update_type":"minor","path":null,"pr_created_at":"2026-05-08T13:38:27.000Z","version_change":"4.0.0 → 4.1.0","issue":{"uuid":"4406805073","node_id":"PR_kwDORB4xOs7ZjYFt","number":229,"state":"closed","title":"Bump the pip-production-dependencies group across 5 directories with 21 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-18T23:27:17.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-08T13:38:27.000Z","updated_at":"2026-05-18T23:27:19.000Z","time_to_close":899330,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-production-dependencies","update_count":21,"packages":[{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"openfeature-hooks-opentelemetry","old_version":"0.3.0","new_version":"0.3.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.39.1","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.39.1","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.60b1","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.60b1","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.60b1","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.60b1","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.39.1","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.60b1","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.60b1","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"grpcio-health-checking","old_version":"1.71.0","new_version":"1.80.0"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.60b1","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"python-dotenv","old_version":"1.2.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"psycopg2-binary","old_version":"2.9.11","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"openai","old_version":"2.15.0","new_version":"2.36.0","repository_url":"https://github.com/openai/openai-python"},{"name":"simplejson","old_version":"3.20.2","new_version":"4.1.1","repository_url":"https://github.com/simplejson/simplejson"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 21 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.15.0` | `2.36.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n\nBumps the pip-production-dependencies group with 4 updates in the /src/llm directory: [flask](https://github.com/pallets/flask), [python-json-logger](https://github.com/nhairs/python-json-logger), [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) and [python-dotenv](https://github.com/theskumar/python-dotenv).\nBumps the pip-production-dependencies group with 13 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.60b1` | `0.62b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n\nBumps the pip-production-dependencies group with 11 updates in the /src/product-reviews directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.15.0` | `2.36.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n\nBumps the pip-production-dependencies group with 8 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-hooks-opentelemetry](https://github.com/open-feature/python-sdk-contrib) | `0.3.0` | `0.3.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.39.1` | `1.41.1` |\n| [grpcio-health-checking](https://grpc.io) | `1.71.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.60b1` | `0.62b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.2...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.2.0 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-hooks-opentelemetry` from 0.3.0 to 0.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-hooks-opentelemetry's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-hooks-opentelemetry: v0.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003e0.3.1\u003c/a\u003e (2026-02-17)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlign TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e2a2127d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\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/open-feature/python-sdk-contrib/commit/83926dea688eac265405b79c2ec00c9d08c8862e\"\u003e\u003ccode\u003e83926de\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-hooks-opentelemetry 0.3.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2a2127d958ea0bafabb673335fd0d9665c8d9291\"\u003e\u003ccode\u003e2a2127d\u003c/code\u003e\u003c/a\u003e fix: Align TracingHook with spec (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/342\"\u003e#342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c08b414007f6ce10dcb83249142f054b6d6043d6\"\u003e\u003ccode\u003ec08b414\u003c/code\u003e\u003c/a\u003e chore: align unleash pyproject.toml to others (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/8239b836a25663e0030b3891d0140cb365798a37\"\u003e\u003ccode\u003e8239b83\u003c/code\u003e\u003c/a\u003e feat(provider): add \u003ccode\u003eaws-ssm\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/331\"\u003e#331\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e\u003ccode\u003e61add22\u003c/code\u003e\u003c/a\u003e fix: replace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a835c77f10c82af2157ea15be0ffae7bad79b8ce\"\u003e\u003ccode\u003ea835c77\u003c/code\u003e\u003c/a\u003e chore: relax \u003ccode\u003etypes-requests\u003c/code\u003e and update \u003ccode\u003egrpcio\u003c/code\u003e version constraints (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/334\"\u003e#334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/a345ef9f1ea3333e49a173553a9098f5db6746a7\"\u003e\u003ccode\u003ea345ef9\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.2.7 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/b9c164a2342d101e23e062a81558f02fe0a38c0b\"\u003e\u003ccode\u003eb9c164a\u003c/code\u003e\u003c/a\u003e fix(security): update dependency protobuf to v6.33.5 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/2feabd5d70bef2de6661fadf3d74238991a27466\"\u003e\u003ccode\u003e2feabd5\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-unleash 0.1.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/332\"\u003e#332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/dcb8fadfbc0263e68c381681b5b92cb5fea2dc0d\"\u003e\u003ccode\u003edcb8fad\u003c/code\u003e\u003c/a\u003e chore: add component owners\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-hooks-opentelemetry/v0.3.0...openfeature-hooks-opentelemetry/v0.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.39.1 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.39.1...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.39.1 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.39.1...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-jinja2` from 0.60b1 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-requests` from 0.60b1 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-system-metrics` from 0.60b1 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-urllib3` from 0.60b1 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-sdk` from 1.39.1 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.39.1...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-semantic-conventions` from 0.60b1 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-logging` from 0.60b1 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio-health-checking` from 1.71.0 to 1.80.0\n\nUpdates `openfeature-provider-flagd` from 0.2.3 to 0.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-flagd's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.4.0...openfeature-provider-flagd/v0.4.1\"\u003e0.4.1\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evarious custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003ec119a77\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eflagd:\u003c/strong\u003e extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e1995534\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.3.0...openfeature-provider-flagd/v0.4.0\"\u003e0.4.0\u003c/a\u003e (2026-04-01)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efractional bucketing improvements (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/373\"\u003e#373\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/83c3e48595c0f44b4a3259719a5d85fde987f492\"\u003e83c3e48\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eintroduce list for fatal status codes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/362\"\u003e#362\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/96a88ada622fb7941a1d4d58205ff3342180fa9a\"\u003e96a88ad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.7...openfeature-provider-flagd/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-03-11)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopenfeature-provider-flagd: v0.2.7\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/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/564eb68aa513e6d8b5fb06aa5f632f427b11abe5\"\u003e\u003ccode\u003e564eb68\u003c/code\u003e\u003c/a\u003e fix(security): update dependency pytest to v9.0.3 [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/378\"\u003e#378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-flagd/v0.2.3...openfeature-provider-flagd/v0.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.60b1 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psutil` from 7.0.0 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.0.0...v7.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.2.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in packag...\n\n_Description has been truncated_","html_url":"https://github.com/rishikeshradhakrishnan/opentelemetry-demo/pull/229","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/rishikeshradhakrishnan%2Fopentelemetry-demo/issues/229","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/229/packages"}},{"old_version":"4.0.0","new_version":"4.1.0","update_type":"minor","path":null,"pr_created_at":"2026-05-07T23:44:13.000Z","version_change":"4.0.0 → 4.1.0","issue":{"uuid":"4402667842","node_id":"PR_kwDORxQaNc7ZV0gj","number":120,"state":"closed","title":"build(deps): bump the pip-production-dependencies group across 5 directories with 18 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-15T23:43:29.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-07T23:44:13.000Z","updated_at":"2026-05-15T23:43:30.000Z","time_to_close":691156,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"pip-production-dependencies","update_count":18,"packages":[{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"openfeature-provider-ofrep","old_version":"0.2.0","new_version":"0.3.0","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-api","old_version":"1.40.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.40.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-jinja2","old_version":"0.61b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-requests","old_version":"0.61b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-system-metrics","old_version":"0.61b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-urllib3","old_version":"0.61b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-sdk","old_version":"1.40.0","new_version":"1.41.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.61b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation-logging","old_version":"0.61b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"grpcio-health-checking","old_version":"1.78.0","new_version":"1.80.0"},{"name":"openfeature-provider-flagd","old_version":"0.2.3","new_version":"0.4.1","repository_url":"https://github.com/open-feature/python-sdk-contrib"},{"name":"opentelemetry-distro","old_version":"0.61b0","new_version":"0.62b1","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"psycopg2-binary","old_version":"2.9.11","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"openai","old_version":"2.26.0","new_version":"2.36.0","repository_url":"https://github.com/openai/openai-python"},{"name":"simplejson","old_version":"3.20.2","new_version":"4.1.1","repository_url":"https://github.com/simplejson/simplejson"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-production-dependencies group with 18 updates in the /src directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.26.0` | `2.36.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n\nBumps the pip-production-dependencies group with 2 updates in the /src/llm directory: [python-json-logger](https://github.com/nhairs/python-json-logger) and [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib).\nBumps the pip-production-dependencies group with 11 updates in the /src/load-generator directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [openfeature-provider-ofrep](https://github.com/open-feature/python-sdk-contrib) | `0.2.0` | `0.3.0` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [opentelemetry-instrumentation-jinja2](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-requests](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-system-metrics](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-urllib3](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.61b0` | `0.62b1` |\n| [opentelemetry-instrumentation-logging](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n\nBumps the pip-production-dependencies group with 9 updates in the /src/product-reviews directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.11` | `2.9.12` |\n| [openai](https://github.com/openai/openai-python) | `2.26.0` | `2.36.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.2` | `4.1.1` |\n\nBumps the pip-production-dependencies group with 6 updates in the /src/recommendation directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.1` |\n| [grpcio-health-checking](https://grpc.io) | `1.78.0` | `1.80.0` |\n| [openfeature-provider-flagd](https://github.com/open-feature/python-sdk-contrib) | `0.2.3` | `0.4.1` |\n| [opentelemetry-distro](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b1` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openfeature-provider-ofrep` from 0.2.0 to 0.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/releases\"\u003eopenfeature-provider-ofrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopenfeature-provider-ofrep: v0.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003e0.3.0\u003c/a\u003e (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003echore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edrop Python 3.9 support (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/364\"\u003e#364\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/0ecd1d4c41e96f90b019a76ce9c3b1f70f2a23a4\"\u003e0ecd1d4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eofrep:\u003c/strong\u003e handle 401, 403, 404 and 5xx errors explicitly and add tests (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/346\"\u003e#346\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/7e18bc120ee1a310c28c96aac5b608941889d756\"\u003e7e18bc1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace project.scripts with poethepoet (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/335\"\u003e#335\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/61add22b975140ccd39b618bf70efeeecbdc25c3\"\u003e61add22\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e✨ New Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egraceful fallback to code default when no default variant (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/347\"\u003e#347\u003c/a\u003e) (\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36db67de59732463a372c056525d6453d8a51a75\"\u003e36db67d\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/open-feature/python-sdk-contrib/commit/4ef10198f1dad5887056f453340f6fb3c9dabc83\"\u003e\u003ccode\u003e4ef1019\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-ofrep 0.3.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/5857f4503c4891034bb63256c1e2a20333ba3da1\"\u003e\u003ccode\u003e5857f45\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-provider-flagd 0.4.1 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/384\"\u003e#384\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/3197e020e0d3ebde666b379699be5d3853c98090\"\u003e\u003ccode\u003e3197e02\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-api 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/4f95c87fb9fd08424089793929697b88eee0c0e6\"\u003e\u003ccode\u003e4f95c87\u003c/code\u003e\u003c/a\u003e chore(main): release openfeature-flagd-core 1.0.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/385\"\u003e#385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/36c52d03aeddf5aa922f74ca7ef5c0ec9f6b790d\"\u003e\u003ccode\u003e36c52d0\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency asserts to \u0026gt;=0.14.0,\u0026lt;0.15.0 (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/357\"\u003e#357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c119a774736dd4d48a4dc82d158aafc17cc3936f\"\u003e\u003ccode\u003ec119a77\u003c/code\u003e\u003c/a\u003e fix: various custom operator conformance fixes (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/386\"\u003e#386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/c8c9ebe7b2cd51e8c0ce065fdb4e024aecfd3ff3\"\u003e\u003ccode\u003ec8c9ebe\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6d3c5f8adafe7150c9bab519ed6c866ff5f85478\"\u003e\u003ccode\u003e6d3c5f8\u003c/code\u003e\u003c/a\u003e chore: stabilize transitive flagd deps (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/387\"\u003e#387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/6b7c78e1f08ad862059bd31d6aef18f66224a755\"\u003e\u003ccode\u003e6b7c78e\u003c/code\u003e\u003c/a\u003e fix(security): update vulnerability-updates [security] (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/381\"\u003e#381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-feature/python-sdk-contrib/commit/1995534c2545b8c65d2944e3e52ce19a552b4815\"\u003e\u003ccode\u003e1995534\u003c/code\u003e\u003c/a\u003e feat(flagd): extract evaluator into api, core, and testkit packages (\u003ca href=\"https://redirect.github.com/open-feature/python-sdk-contrib/issues/377\"\u003e#377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-feature/python-sdk-contrib/compare/openfeature-provider-ofrep/v0.2.0...openfeature-provider-ofrep/v0.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.40.0 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.40.0...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp-proto-grpc` from 1.40.0 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp-proto-grpc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.40.0...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-jinja2` from 0.61b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-jinja2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/issues/4397\"\u003e#4397\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-aiohttp-server\u003c/code\u003e: Use \u003ccode\u003ecanonical\u003c/code\u003e attribute of the \u003ccode\u003eResource\u003c/code\u003e as a span name\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3896\"\u003e#3896\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-requests` from 0.61b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-requests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/issues/4397\"\u003e#4397\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-aiohttp-server\u003c/code\u003e: Use \u003ccode\u003ecanonical\u003c/code\u003e attribute of the \u003ccode\u003eResource\u003c/code\u003e as a span name\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3896\"\u003e#3896\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-system-metrics` from 0.61b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-system-metrics's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/issues/4397\"\u003e#4397\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-aiohttp-server\u003c/code\u003e: Use \u003ccode\u003ecanonical\u003c/code\u003e attribute of the \u003ccode\u003eResource\u003c/code\u003e as a span name\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3896\"\u003e#3896\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation-urllib3` from 0.61b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-instrumentation-urllib3's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nThe following components are released independently and maintain individual CHANGELOG files.\nUse \u003ca href=\"https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-python-contrib+path%3A**%2FCHANGELOG.md\u0026amp;type=code\"\u003ethis search for a list of all CHANGELOG.md files in this repo\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for \u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/issues/4397\"\u003e#4397\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4533\"\u003e#4533\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status, suppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review instructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e and \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level and formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments and add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource information\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-pika\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eReadyMessagesDequeProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4461\"\u003e#4461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e Use \u003ccode\u003eObjectProxy\u003c/code\u003e instead of \u003ccode\u003eBaseObjectProxy\u003c/code\u003e for \u003ccode\u003eTracedCursorProxy\u003c/code\u003e to restore iterability with wrapt 2.x\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4427\"\u003e#4427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Clean up environ keys in \u003ccode\u003e_teardown_request\u003c/code\u003e to prevent duplicate execution\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4341\"\u003e#4341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-flask\u003c/code\u003e: Stop reading the deprecated (from 3.1) \u003ccode\u003eflask.__version__\u003c/code\u003e attribute; resolve the Flask version via \u003ccode\u003eimportlib.metadata\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4422\"\u003e#4422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-celery\u003c/code\u003e: Coerce non-string values to strings in \u003ccode\u003eCeleryGetter.get()\u003c/code\u003e to prevent \u003ccode\u003eTypeError\u003c/code\u003e in \u003ccode\u003eTraceState.from_header()\u003c/code\u003e when Celery request attributes contain ints\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4360\"\u003e#4360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-aiohttp-server\u003c/code\u003e: Use \u003ccode\u003ecanonical\u003c/code\u003e attribute of the \u003ccode\u003eResource\u003c/code\u003e as a span name\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3896\"\u003e#3896\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-sdk` from 1.40.0 to 1.41.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/v1.41.1/CHANGELOG.md\"\u003eopentelemetry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.41.1/0.62b1 (2026-04-24)\u003c/h2\u003e\n\u003ch2\u003eVersion 1.41.0/0.62b0 (2026-04-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ehost\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].host\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003econtainer\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].container\u003c/code\u003e, using entry point loading of the \u003ccode\u003eopentelemetry-resource-detector-containerid\u003c/code\u003e contrib package\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_tracer_provider\u003c/code\u003e/\u003ccode\u003econfigure_tracer_provider\u003c/code\u003e to declarative file configuration, enabling TracerProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnabled the flake8-tidy-import plugins rules for the ruff linter. These rules throw warnings for relative imports in the modules.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5019\"\u003e#5019\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Fix \u003ccode\u003eAttributeError\u003c/code\u003e in \u003ccode\u003eExplicitBucketHistogramAggregation\u003c/code\u003e when applied to non-Histogram instruments without explicit boundaries\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBatchLogRecordProcessor\u003c/code\u003e default \u003ccode\u003eschedule_delay_millis\u003c/code\u003e from 5000ms to 1000ms to comply with the OTel specification. Note: logs may be exported 5x more frequently by default (e.g. for users who don't explicitly set the \u003ccode\u003eOTEL_BLRP_SCHEDULE_DELAY\u003c/code\u003e env var).\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4998\"\u003e#4998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eprocess\u003c/code\u003e resource detector support to declarative file configuration via \u003ccode\u003edetection_development.detectors[].process\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5001\"\u003e#5001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add shared \u003ccode\u003e_parse_headers\u003c/code\u003e helper for declarative config OTLP exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Replace a broad exception in attribute cleaning tests to satisfy pylint in the \u003ccode\u003elint-opentelemetry-api\u003c/code\u003e CI job\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_meter_provider\u003c/code\u003e/\u003ccode\u003econfigure_meter_provider\u003c/code\u003e to declarative file configuration, enabling MeterProvider instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_resource\u003c/code\u003e and \u003ccode\u003ecreate_propagator\u003c/code\u003e/\u003ccode\u003econfigure_propagator\u003c/code\u003e to declarative file configuration, enabling Resource and propagator instantiation from config files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Map Python \u003ccode\u003eCRITICAL\u003c/code\u003e log level to OTel \u003ccode\u003eFATAL\u003c/code\u003e severity text per the specification\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add file configuration support with YAML/JSON loading, environment variable substitution, and schema validation against the vendored OTel config JSON schema\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4898\"\u003e#4898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix intermittent CI failures in \u003ccode\u003egetting-started\u003c/code\u003e and \u003ccode\u003etracecontext\u003c/code\u003e jobs caused by GitHub git CDN SHA propagation lag by installing contrib packages from the already-checked-out local copy instead of a second git clone\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4958\"\u003e#4958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: fix type annotations on \u003ccode\u003eMetricReader\u003c/code\u003e and related types\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4938/\"\u003e#4938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement log creation metric\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4935\"\u003e#4935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement metric reader metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: implement processor metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: upgrade vendored OTel configuration schema from v1.0.0-rc.3 to v1.0.0\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4965\"\u003e#4965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove check-links ci job\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve some Pyright type errors in Span/ReadableSpan and utility stubs\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-prometheus\u003c/code\u003e: Fix metric name prefix\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4895\"\u003e#4895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add deepcopy support for \u003ccode\u003eBoundedAttributes\u003c/code\u003e and \u003ccode\u003eBoundedList\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4934\"\u003e#4934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-proto-json\u003c/code\u003e, \u003ccode\u003eopentelemetry-codegen-json\u003c/code\u003e: Implement custom protoc plugin to generate OTLP JSON class definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/760e0248edbd01ae817941c1dfa61c07241b0727\"\u003e\u003ccode\u003e760e024\u003c/code\u003e\u003c/a\u003e Prepare release 1.41.1/0.62b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5138\"\u003e#5138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/90e06bcd8c024a38ecf388c19c5a15fc094ea0ed\"\u003e\u003ccode\u003e90e06bc\u003c/code\u003e\u003c/a\u003e Unreleased changelog for 1.41.1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1a178fcc5c689516849ced80fb2533fe7db7a80f\"\u003e\u003ccode\u003e1a178fc\u003c/code\u003e\u003c/a\u003e [release/v1.41.x-0.62bx] Prepare release 1.41.0/0.62b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5064\"\u003e#5064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/37dea4bbdb1a3c83b96fc22c2f68a848b4989fb5\"\u003e\u003ccode\u003e37dea4b\u003c/code\u003e\u003c/a\u003e feat: add experimental logger configurator (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4980\"\u003e#4980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7c860ca40eb87c15fb608ce3598cfec4a5da2d1c\"\u003e\u003ccode\u003e7c860ca\u003c/code\u003e\u003c/a\u003e misc: update version for codegen-json and proto-json packages (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5061\"\u003e#5061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/b3d98b392fd1fa1a501e11ce8e126f2003edb895\"\u003e\u003ccode\u003eb3d98b3\u003c/code\u003e\u003c/a\u003e [chore]: update readme (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5060\"\u003e#5060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/dbbd1bca26f12d0cefff721a857d08a82476f434\"\u003e\u003ccode\u003edbbd1bc\u003c/code\u003e\u003c/a\u003e feat(config): Add MeterProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4987\"\u003e#4987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/6faa58c58782313283a87a7c61fbbdd9cd2054d6\"\u003e\u003ccode\u003e6faa58c\u003c/code\u003e\u003c/a\u003e feat(config): add host resource detector support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/c0cbfbd62fa59e2c41cd2c88371dc6478fa95716\"\u003e\u003ccode\u003ec0cbfbd\u003c/code\u003e\u003c/a\u003e feat(config): wire container resource detector via entry point loading (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/f764e45f52952f5a0287e5a6c094cbfd56accd2b\"\u003e\u003ccode\u003ef764e45\u003c/code\u003e\u003c/a\u003e feat(config): Add TracerProvider support for declarative config (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4985\"\u003e#4985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.40.0...v1.41.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-semantic-conventions` from 0.61b0 to 0.62b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-semantic-conventions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.0.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to \u003ca href=\"https://semver.org/spec/v2.0.0.html\"\u003eSemantic Versioning\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eBreaking changes ongoing\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!IMPORTANT]\nWe are working on stabilizing the Log signal that would require making deprecations and breaking changes. We will try to reduce the releases that may require an update to your code, especially for instrumentations or for sdk developers.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eApply fixes for \u003ccode\u003eUP\u003c/code\u003e ruff rule\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5133\"\u003e#5133\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSwitch to SPDX license headers and add CI enforcement\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5177\"\u003e#5177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e: Enforce W3C Baggage size limits on outbound propagation in \u003ccode\u003eW3CBaggagePropagator.inject()\u003c/code\u003e. Previously only inbound extraction enforced limits; now inject also caps entries at 180, individual pairs at 4096 bytes, and total header at 8192 bytes per the W3C Baggage spec. The extract path max_pairs limit now counts all size-valid entries rather than only successfully parsed ones.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5163\"\u003e#5163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eadditional_properties\u003c/code\u003e support to generated config models via custom \u003ccode\u003edatamodel-codegen\u003c/code\u003e template, enabling plugin/custom component names to flow through typed dataclasses\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5131\"\u003e#5131\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix incorrect code example in \u003ccode\u003ecreate_tracer()\u003c/code\u003e docstring\n(\u003ca href=\"https:/...\n\n_Description has been truncated_","html_url":"https://github.com/GuanceDemo/OpenTelemetry_Demo/pull/120","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuanceDemo%2FOpenTelemetry_Demo/issues/120","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/120/packages"}},{"old_version":"\u003c3.0.0,\u003e=2.0.4","new_version":"\u003e=3.3.0,\u003c4.0.0","update_type":"minor","path":"/backend","pr_created_at":"2026-05-04T10:52:10.000Z","version_change":"\u003c3.0.0,\u003e=2.0.4 → \u003e=3.3.0,\u003c4.0.0","issue":{"uuid":"4375925636","node_id":"PR_kwDORAid8c7X-VsW","number":685,"state":"open","title":"chore(backend)(deps): update python-json-logger requirement from \u003c3.0.0,\u003e=2.0.4 to \u003e=3.3.0,\u003c4.0.0 in /backend","user":"dependabot[bot]","labels":["backend"],"assignees":[],"locked":false,"comments_count":4,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-04T10:52:10.000Z","updated_at":"2026-05-04T11:00:31.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(backend)(deps): update","packages":[{"name":"python-json-logger","old_version":"\u003c3.0.0,\u003e=2.0.4","new_version":"\u003e=3.3.0,\u003c4.0.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":"/backend","ecosystem":"pip"},"body":"Updates the requirements on [python-json-logger](https://github.com/nhairs/python-json-logger) 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/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.0...v3.2.1\"\u003e3.2.1\u003c/a\u003e - 2024-12-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImport error on \u003ccode\u003eimport pythonjsonlogger.jsonlogger\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/29\"\u003e#29\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.1.0...v3.2.0\"\u003e3.2.0\u003c/a\u003e - 2024-12-11\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epythonjsonlogger.[ORJSON,MSGSPEC]_AVAILABLE\u003c/code\u003e no longer imports the respective package when determining availability.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003epythonjsonlogger.[orjson,msgspec]\u003c/code\u003e now throws a \u003ccode\u003epythonjsonlogger.exception.MissingPackageError\u003c/code\u003e when required libraries are not available. These contain more information about what is missing whilst still being an \u003ccode\u003eImportError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edefaults\u003c/code\u003e parameter is no longer ignored and now conforms to the standard library. Setting a defaults dictionary will add the specified keys if the those keys do not exist in a record or weren't passed by the \u003ccode\u003eextra\u003c/code\u003e parameter when logging a message.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etyping_extensions\u003c/code\u003e is only installed on Python version \u0026lt; 3.10.\u003c/li\u003e\n\u003cli\u003eSupport Python 3.13\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003emsgspec\u003c/code\u003e has only been tested against pre-release versions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/cjwatson\"\u003e\u003ccode\u003e@​cjwatson\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/bharel\"\u003e\u003ccode\u003e@​bharel\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.0.1...v3.1.0\"\u003e3.1.0\u003c/a\u003e - 2023-05-28\u003c/h2\u003e\n\u003cp\u003eThis splits common funcitonality out to allow supporting other JSON encoders. Although this is a large refactor, backwards compatibility has been maintained.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epythonjsonlogger.core\u003c/code\u003e - more details below.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003epythonjsonlogger.defaults\u003c/code\u003e module that provides many functions for handling unsupported types.\u003c/li\u003e\n\u003cli\u003eOrjson encoder support via \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e with the following additions:\n\u003cul\u003e\n\u003cli\u003ebytes are URL safe base64 encoded.\u003c/li\u003e\n\u003cli\u003eExceptions are \u0026quot;pretty printed\u0026quot; using the exception name and message e.g. \u003ccode\u003e\u0026quot;ValueError: bad value passed\u0026quot;\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eEnum values use their value, Enum classes now return all values as a list.\u003c/li\u003e\n\u003cli\u003eTracebacks are supported\u003c/li\u003e\n\u003cli\u003eClasses (aka types) are support\u003c/li\u003e\n\u003cli\u003eWill fallback on \u003ccode\u003e__str__\u003c/code\u003e if available, else \u003ccode\u003e__repr__\u003c/code\u003e if available, else will use \u003ccode\u003e__could_not_encode__\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eMsgSpec encoder support via \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e with the following additions:\n\u003cul\u003e\n\u003cli\u003eExceptions are \u0026quot;pretty printed\u0026quot; using the exception name and message e.g. \u003ccode\u003e\u0026quot;ValueError: bad value passed\u0026quot;\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eEnum classes now return all values as a list.\u003c/li\u003e\n\u003cli\u003eTracebacks are supported\u003c/li\u003e\n\u003cli\u003eClasses (aka types) are support\u003c/li\u003e\n\u003cli\u003eWill fallback on \u003ccode\u003e__str__\u003c/code\u003e if available, else \u003ccode\u003e__repr__\u003c/code\u003e if available, else will use \u003ccode\u003e__could_not_encode__\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eNote: msgspec only supprts enum values of type \u003ccode\u003eint\u003c/code\u003e or \u003ccode\u003estr\u003c/code\u003e \u003ca href=\"https://redirect.github.com/jcrist/msgspec/issues/680\"\u003ejcrist/msgspec#680\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/9e6cb679dfb56cb82d9a8cc91f956efd72427055\"\u003e\u003ccode\u003e9e6cb67\u003c/code\u003e\u003c/a\u003e Release 3.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/db04a0f9066cc331f8d6177f828fe073c7b2a4cc\"\u003e\u003ccode\u003edb04a0f\u003c/code\u003e\u003c/a\u003e Add options to encode stack information into an array (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/39\"\u003e#39\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0092ea0be1cd28e3c1da51eaa084c503bb3710b7\"\u003e\u003ccode\u003e0092ea0\u003c/code\u003e\u003c/a\u003e Move to uv (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/40\"\u003e#40\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/1ce81a3614d8c77389a9c048d341593e2a7467e7\"\u003e\u003ccode\u003e1ce81a3\u003c/code\u003e\u003c/a\u003e [tests] Update tests for msgspec 0.19.0 (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/41\"\u003e#41\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/e7761e56edb980cfab0165e32469d5fd017a5d72\"\u003e\u003ccode\u003ee7761e5\u003c/code\u003e\u003c/a\u003e Fix import pthonjsonlogger.jsonlogger (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/33\"\u003e#33\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/36f160e93071d1de8b160a107914e99f1ac983d3\"\u003e\u003ccode\u003e36f160e\u003c/code\u003e\u003c/a\u003e [docs,readme] add PyPI monthly downloads badge (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/34\"\u003e#34\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/f96de2222ef60d4ab34b29d067db8b59642bf657\"\u003e\u003ccode\u003ef96de22\u003c/code\u003e\u003c/a\u003e [docs,readme] The fork is now released on PyPI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/c6c804171381b7500823a8f151101a56f80853a8\"\u003e\u003ccode\u003ec6c8041\u003c/code\u003e\u003c/a\u003e Release 3.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/e5d03eb682fee2fd1b31295a4af4053dcf7d731a\"\u003e\u003ccode\u003ee5d03eb\u003c/code\u003e\u003c/a\u003e [docs.contributing] Add PSF affiliation clarification\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2548e3a2e3cedf6bef3ee7c60c55b7c02d1af11a\"\u003e\u003ccode\u003e2548e3a\u003c/code\u003e\u003c/a\u003e [pyproject] Support Python 3.13 (\u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/23\"\u003e#23\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v2.0.4...v3.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\n\u003c!-- This is an auto-generated comment: release notes by coderabbit.ai --\u003e\n\n## Summary by CodeRabbit\n\n* **Chores**\n  * Updated backend logging dependency to a newer stable version.\n\n\u003c!-- end of auto-generated comment: release notes by coderabbit.ai --\u003e","html_url":"https://github.com/tjsasakifln/PNCP-poc/pull/685","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tjsasakifln%2FPNCP-poc/issues/685","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/685/packages"}},{"old_version":"2.0.7","new_version":"4.1.0","update_type":"major","path":null,"pr_created_at":"2026-05-04T06:42:27.000Z","version_change":"2.0.7 → 4.1.0","issue":{"uuid":"4374496342","node_id":"PR_kwDOOYEWwc7X5mx0","number":15,"state":"open","title":"chore(deps): bump python-json-logger from 2.0.7 to 4.1.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-05-04T06:42:27.000Z","updated_at":"2026-05-04T06:42:28.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"python-json-logger","old_version":"2.0.7","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":null,"ecosystem":"pip"},"body":"Bumps [python-json-logger](https://github.com/nhairs/python-json-logger) from 2.0.7 to 4.1.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.0.rc1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0.rc1\"\u003e4.0.0.rc1\u003c/a\u003e - 2025-09-07\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.0...v3.2.1\"\u003e3.2.1\u003c/a\u003e - 2024-12-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImport error on \u003ccode\u003eimport pythonjsonlogger.jsonlogger\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/29\"\u003e#29\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/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v2.0.7...v4.1.0\"\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=python-json-logger\u0026package-manager=pip\u0026previous-version=2.0.7\u0026new-version=4.1.0)](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/Pablo-Cubides/chatbot-whatsapp-llm/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pablo-Cubides%2Fchatbot-whatsapp-llm/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"}},{"old_version":"4.0.0","new_version":"4.1.0","update_type":"minor","path":null,"pr_created_at":"2026-05-03T11:17:28.000Z","version_change":"4.0.0 → 4.1.0","issue":{"uuid":"4371603012","node_id":"PR_kwDOROagjc7Xwytt","number":7,"state":"closed","title":"Chore(deps): Bump the python-dependencies group across 1 directory with 72 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-10T11:07:16.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-03T11:17:28.000Z","updated_at":"2026-05-10T11:07:18.000Z","time_to_close":604188,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Chore(deps): Bump","group_name":"python-dependencies","update_count":72,"packages":[{"name":"altair","old_version":"6.0.0","new_version":"6.1.0","repository_url":"https://github.com/vega/altair"},{"name":"anyio","old_version":"4.12.1","new_version":"4.13.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"async-lru","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/aio-libs/async-lru"},{"name":"attrs","old_version":"25.4.0","new_version":"26.1.0","repository_url":"https://github.com/python-attrs/attrs"},{"name":"cachetools","old_version":"6.2.6","new_version":"7.1.0","repository_url":"https://github.com/tkem/cachetools"},{"name":"certifi","old_version":"2026.1.4","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"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":"cryptography","old_version":"46.0.7","new_version":"47.0.0","repository_url":"https://github.com/pyca/cryptography"},{"name":"filelock","old_version":"3.28.0","new_version":"3.29.0","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"fonttools","old_version":"4.61.1","new_version":"4.62.1","repository_url":"https://github.com/fonttools/fonttools"},{"name":"gitpython","old_version":"3.1.46","new_version":"3.1.49","repository_url":"https://github.com/gitpython-developers/GitPython"},{"name":"groq","old_version":"0.37.1","new_version":"1.2.0","repository_url":"https://github.com/groq/groq-python"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"ipython","old_version":"9.10.0","new_version":"9.13.0","repository_url":"https://github.com/ipython/ipython"},{"name":"jedi","old_version":"0.19.2","new_version":"0.20.0","repository_url":"https://github.com/davidhalter/jedi"},{"name":"json5","old_version":"0.13.0","new_version":"0.14.0","repository_url":"https://github.com/dpranke/pyjson5"},{"name":"jsonpointer","old_version":"3.0.0","new_version":"3.1.1","repository_url":"https://github.com/stefankoegl/python-json-pointer"},{"name":"jupyter-events","old_version":"0.12.0","new_version":"0.12.1","repository_url":"https://github.com/jupyter/jupyter_events"},{"name":"jupyter-lsp","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/jupyter-lsp/jupyterlab-lsp"},{"name":"jupyterlab","old_version":"4.5.4","new_version":"4.5.7","repository_url":"https://github.com/jupyterlab/jupyterlab"},{"name":"kiwisolver","old_version":"1.4.9","new_version":"1.5.0","repository_url":"https://github.com/nucleic/kiwi"},{"name":"langchain","old_version":"1.2.15","new_version":"1.2.17","repository_url":"https://github.com/langchain-ai/langchain"},{"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.10","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langgraph-checkpoint","old_version":"4.0.2","new_version":"4.0.3","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langgraph-prebuilt","old_version":"1.0.10","new_version":"1.0.13","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langsmith","old_version":"0.7.32","new_version":"0.8.0","repository_url":"https://github.com/langchain-ai/langsmith-sdk"},{"name":"llvmlite","old_version":"0.46.0b1","new_version":"0.47.0","repository_url":"https://github.com/numba/llvmlite"},{"name":"mako","old_version":"1.3.10","new_version":"1.3.12","repository_url":"https://github.com/sqlalchemy/mako"},{"name":"markupsafe","old_version":"2.1.5","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"matplotlib","old_version":"3.10.8","new_version":"3.10.9","repository_url":"https://github.com/matplotlib/matplotlib"},{"name":"narwhals","old_version":"2.16.0","new_version":"2.20.0","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"nbconvert","old_version":"7.17.0","new_version":"7.17.1","repository_url":"https://github.com/jupyter/nbconvert"},{"name":"notebook","old_version":"7.5.3","new_version":"7.5.6","repository_url":"https://github.com/jupyter/notebook"},{"name":"numba","old_version":"0.63.0b1","new_version":"0.65.1","repository_url":"https://github.com/numba/numba"},{"name":"numpy","old_version":"2.4.2","new_version":"2.4.4","repository_url":"https://github.com/numpy/numpy"},{"name":"optuna","old_version":"4.7.0","new_version":"4.8.0","repository_url":"https://github.com/optuna/optuna"},{"name":"packaging","old_version":"26.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pandas","old_version":"2.3.3","new_version":"3.0.2","repository_url":"https://github.com/pandas-dev/pandas"},{"name":"parso","old_version":"0.8.6","new_version":"0.8.7","repository_url":"https://github.com/davidhalter/parso"},{"name":"pdfminer-six","old_version":"20251230","new_version":"20260107","repository_url":"https://github.com/pdfminer/pdfminer.six"},{"name":"pillow","old_version":"12.1.1","new_version":"12.2.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"platformdirs","old_version":"4.5.1","new_version":"4.9.6","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"plotly","old_version":"5.18.0","new_version":"6.7.0","repository_url":"https://github.com/plotly/plotly.py"},{"name":"pre-commit","old_version":"4.5.1","new_version":"4.6.0","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"prometheus-client","old_version":"0.24.1","new_version":"0.25.0","repository_url":"https://github.com/prometheus/client_python"},{"name":"protobuf","old_version":"6.33.5","new_version":"7.34.1","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pyarrow","old_version":"23.0.0","new_version":"24.0.0","repository_url":"https://github.com/apache/arrow"},{"name":"pydantic","old_version":"2.13.2","new_version":"2.13.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.46.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydeck","old_version":"0.9.1","new_version":"0.9.2","repository_url":"https://github.com/visgl/deck.gl"},{"name":"pygments","old_version":"2.19.2","new_version":"2.20.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pypdfium2","old_version":"5.7.0","new_version":"5.7.1","repository_url":"https://github.com/pypdfium2-team/pypdfium2"},{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"pytz","old_version":"2025.2","new_version":"2026.1.post1","repository_url":"https://github.com/stub42/pytz"},{"name":"requests","old_version":"2.32.5","new_version":"2.33.1","repository_url":"https://github.com/psf/requests"},{"name":"ruff","old_version":"0.15.11","new_version":"0.15.12","repository_url":"https://github.com/astral-sh/ruff"},{"name":"scipy","old_version":"1.17.0","new_version":"1.17.1","repository_url":"https://github.com/scipy/scipy"},{"name":"setuptools","old_version":"82.0.0","new_version":"82.0.1","repository_url":"https://github.com/pypa/setuptools"},{"name":"shap","old_version":"0.50.0","new_version":"0.51.0","repository_url":"https://github.com/shap/shap"},{"name":"smmap","old_version":"5.0.2","new_version":"5.0.3","repository_url":"https://github.com/gitpython-developers/smmap"},{"name":"sqlalchemy","old_version":"2.0.47","new_version":"2.0.49","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"streamlit","old_version":"1.54.0","new_version":"1.57.0","repository_url":"https://github.com/streamlit/streamlit"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"tornado","old_version":"6.5.4","new_version":"6.5.5","repository_url":"https://github.com/tornadoweb/tornado"},{"name":"traitlets","old_version":"5.14","new_version":"5.14.3","repository_url":"https://github.com/ipython/traitlets"},{"name":"tzdata","old_version":"2025.3","new_version":"2026.2","repository_url":"https://github.com/python/tzdata"},{"name":"virtualenv","old_version":"21.2.4","new_version":"21.3.0","repository_url":"https://github.com/pypa/virtualenv"},{"name":"wcwidth","old_version":"0.6.0","new_version":"0.7.0","repository_url":"https://github.com/jquast/wcwidth"},{"name":"xgboost","old_version":"2.1.4","new_version":"3.2.0","repository_url":"https://github.com/dmlc/xgboost"},{"name":"xxhash","old_version":"3.6.0","new_version":"3.7.0","repository_url":"https://github.com/ifduyue/python-xxhash"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-dependencies group with 72 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [altair](https://github.com/vega/altair) | `6.0.0` | `6.1.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.12.1` | `4.13.0` |\n| [async-lru](https://github.com/aio-libs/async-lru) | `2.1.0` | `2.3.0` |\n| [attrs](https://github.com/python-attrs/attrs) | `25.4.0` | `26.1.0` |\n| [cachetools](https://github.com/tkem/cachetools) | `6.2.6` | `7.1.0` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.1.4` | `2026.4.22` |\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| [cryptography](https://github.com/pyca/cryptography) | `46.0.7` | `47.0.0` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.28.0` | `3.29.0` |\n| [fonttools](https://github.com/fonttools/fonttools) | `4.61.1` | `4.62.1` |\n| [gitpython](https://github.com/gitpython-developers/GitPython) | `3.1.46` | `3.1.49` |\n| [groq](https://github.com/groq/groq-python) | `0.37.1` | `1.2.0` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.13` |\n| [ipython](https://github.com/ipython/ipython) | `9.10.0` | `9.13.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.2` | `0.20.0` |\n| [json5](https://github.com/dpranke/pyjson5) | `0.13.0` | `0.14.0` |\n| [jsonpointer](https://github.com/stefankoegl/python-json-pointer) | `3.0.0` | `3.1.1` |\n| [jupyter-events](https://github.com/jupyter/jupyter_events) | `0.12.0` | `0.12.1` |\n| [jupyter-lsp](https://github.com/jupyter-lsp/jupyterlab-lsp) | `2.3.0` | `2.3.1` |\n| [jupyterlab](https://github.com/jupyterlab/jupyterlab) | `4.5.4` | `4.5.7` |\n| [kiwisolver](https://github.com/nucleic/kiwi) | `1.4.9` | `1.5.0` |\n| [langchain](https://github.com/langchain-ai/langchain) | `1.2.15` | `1.2.17` |\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.10` |\n| [langgraph-checkpoint](https://github.com/langchain-ai/langgraph) | `4.0.2` | `4.0.3` |\n| [langgraph-prebuilt](https://github.com/langchain-ai/langgraph) | `1.0.10` | `1.0.13` |\n| [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.7.32` | `0.8.0` |\n| [llvmlite](https://github.com/numba/llvmlite) | `0.46.0b1` | `0.47.0` |\n| [mako](https://github.com/sqlalchemy/mako) | `1.3.10` | `1.3.12` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `2.1.5` | `3.0.3` |\n| [matplotlib](https://github.com/matplotlib/matplotlib) | `3.10.8` | `3.10.9` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.16.0` | `2.20.0` |\n| [nbconvert](https://github.com/jupyter/nbconvert) | `7.17.0` | `7.17.1` |\n| [notebook](https://github.com/jupyter/notebook) | `7.5.3` | `7.5.6` |\n| [numba](https://github.com/numba/numba) | `0.63.0b1` | `0.65.1` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.2` | `2.4.4` |\n| [optuna](https://github.com/optuna/optuna) | `4.7.0` | `4.8.0` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.2` |\n| [pandas](https://github.com/pandas-dev/pandas) | `2.3.3` | `3.0.2` |\n| [parso](https://github.com/davidhalter/parso) | `0.8.6` | `0.8.7` |\n| [pdfminer-six](https://github.com/pdfminer/pdfminer.six) | `20251230` | `20260107` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.1.1` | `12.2.0` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.5.1` | `4.9.6` |\n| [plotly](https://github.com/plotly/plotly.py) | `5.18.0` | `6.7.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.5.1` | `4.6.0` |\n| [prometheus-client](https://github.com/prometheus/client_python) | `0.24.1` | `0.25.0` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.5` | `7.34.1` |\n| [pyarrow](https://github.com/apache/arrow) | `23.0.0` | `24.0.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.2` | `2.13.3` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.46.3` |\n| [pydeck](https://github.com/visgl/deck.gl) | `0.9.1` | `0.9.2` |\n| [pygments](https://github.com/pygments/pygments) | `2.19.2` | `2.20.0` |\n| [pypdfium2](https://github.com/pypdfium2-team/pypdfium2) | `5.7.0` | `5.7.1` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [pytz](https://github.com/stub42/pytz) | `2025.2` | `2026.1.post1` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.11` | `0.15.12` |\n| [scipy](https://github.com/scipy/scipy) | `1.17.0` | `1.17.1` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.0` | `82.0.1` |\n| [shap](https://github.com/shap/shap) | `0.50.0` | `0.51.0` |\n| [smmap](https://github.com/gitpython-developers/smmap) | `5.0.2` | `5.0.3` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.47` | `2.0.49` |\n| [streamlit](https://github.com/streamlit/streamlit) | `1.54.0` | `1.57.0` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [tornado](https://github.com/tornadoweb/tornado) | `6.5.4` | `6.5.5` |\n| [traitlets](https://github.com/ipython/traitlets) | `5.14` | `5.14.3` |\n| [tzdata](https://github.com/python/tzdata) | `2025.3` | `2026.2` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `21.2.4` | `21.3.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.6.0` | `0.7.0` |\n| [xgboost](https://github.com/dmlc/xgboost) | `2.1.4` | `3.2.0` |\n| [xxhash](https://github.com/ifduyue/python-xxhash) | `3.6.0` | `3.7.0` |\n\n\nUpdates `altair` from 6.0.0 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/vega/altair/releases\"\u003ealtair's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThere are many exciting improvements in this release! Read on for details and a big thanks to everyone who contributed  :tada:\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efeat: Update to Vega-Lite 6.4.1 by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4005\"\u003evega/altair#4005\u003c/a\u003e. See \u003ca href=\"https://github.com/vega/vega-lite/releases\"\u003ethe Vega-Lite Release Notes\u003c/a\u003e for details; a few highlights:\n\u003cul\u003e\n\u003cli\u003eNewlines are now supported in tooltips.\u003c/li\u003e\n\u003cli\u003eThe default stack order of marks like bars and areas is now aligned with the color domain.\u003c/li\u003e\n\u003cli\u003eInteractive charts automatically change the cursor to pointer to indicate they can be interacted with.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003efeat: auto hoist facet encodings in layer by \u003ca href=\"https://github.com/thomascamminady\"\u003e\u003ccode\u003e@​thomascamminady\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3965\"\u003evega/altair#3965\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eThis allows layering of simple faceted charts that define the same facet variables, instead of requiring that layering happens before faceting.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003efeat: Accept ZoneInfo(key='UTC') by \u003ca href=\"https://github.com/JackKelly\"\u003e\u003ccode\u003e@​JackKelly\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3944\"\u003evega/altair#3944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add pandas 3 compatibility and fix CI (drop Python 3.9, pin polars \u0026lt;1.38) by \u003ca href=\"https://github.com/mattijn\"\u003e\u003ccode\u003e@​mattijn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3950\"\u003evega/altair#3950\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add ensure_ascii option to to_json() with default False by \u003ca href=\"https://github.com/RamiNoodle733\"\u003e\u003ccode\u003e@​RamiNoodle733\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3952\"\u003evega/altair#3952\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efix: unique view names per concat cell and correct param.views by \u003ca href=\"https://github.com/mattijn\"\u003e\u003ccode\u003e@​mattijn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3974\"\u003evega/altair#3974\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: Compute unique hashes for identical specs that use different data by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3982\"\u003evega/altair#3982\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: preserve polars datetime timezones during serialization by \u003ca href=\"https://github.com/kjgoodrick\"\u003e\u003ccode\u003e@​kjgoodrick\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3922\"\u003evega/altair#3922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: type issues with Chart save methods. by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3934\"\u003evega/altair#3934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: type issues with Chart mark methods. by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3936\"\u003evega/altair#3936\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: improve api.py typing by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3955\"\u003evega/altair#3955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: typing issues for mypy 1.18 and above. by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3966\"\u003evega/altair#3966\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edocs: Highlight new examples in the gallery by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3999\"\u003evega/altair#3999\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eIt's now easier to find which examples have been \u003ca href=\"https://altair-viz.github.io/gallery/index.html\"\u003erecently added to the Altair gallery\u003c/a\u003e and the page looks more visually appealing overall.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003edocs: add WASM / Pyodide installation instructions by \u003ca href=\"https://github.com/ArnavTomar18\"\u003e\u003ccode\u003e@​ArnavTomar18\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3932\"\u003evega/altair#3932\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Correct some grammar issues by \u003ca href=\"https://github.com/star1327p\"\u003e\u003ccode\u003e@​star1327p\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3942\"\u003evega/altair#3942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add identity line (x=y diagonal) example to rule mark docs by \u003ca href=\"https://github.com/stbiadmin\"\u003e\u003ccode\u003e@​stbiadmin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3969\"\u003evega/altair#3969\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Correct tooltip field for faceted choropleth example by \u003ca href=\"https://github.com/Sparlitu\"\u003e\u003ccode\u003e@​Sparlitu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3920\"\u003evega/altair#3920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: wrong tooltip variable id -\u0026gt; county_id by \u003ca href=\"https://github.com/thomascamminady\"\u003e\u003ccode\u003e@​thomascamminady\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3924\"\u003evega/altair#3924\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: a HConcatChart -\u0026gt; an HConcatChart by \u003ca href=\"https://github.com/star1327p\"\u003e\u003ccode\u003e@​star1327p\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3917\"\u003evega/altair#3917\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Substitute field strings correctly so that points in theme display chart show up by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3984\"\u003evega/altair#3984\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Change the lead size to fit on two rows by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3980\"\u003evega/altair#3980\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Make the first page title fit on one row by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3979\"\u003evega/altair#3979\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix broken density example by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3985\"\u003evega/altair#3985\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Simplify inline expr syntax by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3996\"\u003evega/altair#3996\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebuild: Speed up doc build time for faster local development by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3997\"\u003evega/altair#3997\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: Add watch option to automatically rebuild docs upon detected changes by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3998\"\u003evega/altair#3998\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: Create docs CLI to facilitate different build combinations by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4000\"\u003evega/altair#4000\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump dev version to 6.1.0dev by \u003ca href=\"https://github.com/mattijn\"\u003e\u003ccode\u003e@​mattijn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3913\"\u003evega/altair#3913\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estyle: Make chained chart methods work with type checkers other than pyright by \u003ca href=\"https://github.com/hamdanal\"\u003e\u003ccode\u003e@​hamdanal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3933\"\u003evega/altair#3933\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: bump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3928\"\u003evega/altair#3928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump urllib3 from 2.5.0 to 2.6.3 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3939\"\u003evega/altair#3939\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/af1450f413fd046da032857519bba536dad97910\"\u003e\u003ccode\u003eaf1450f\u003c/code\u003e\u003c/a\u003e chore: 🔧 Bump versions for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/af071276321b64a8ea66a773dbc60d659dd41fa1\"\u003e\u003ccode\u003eaf07127\u003c/code\u003e\u003c/a\u003e feat: Update to Vega-Lite 6.4.1 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4005\"\u003e#4005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/e093674705eebaab23887318e190b0cc0977cc21\"\u003e\u003ccode\u003ee093674\u003c/code\u003e\u003c/a\u003e harden prerelease workflow (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4008\"\u003e#4008\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/942dead2972aee5efde8f1488b06c0a8fba58b26\"\u003e\u003ccode\u003e942dead\u003c/code\u003e\u003c/a\u003e build(deps): bump uv from 0.10.4 to 0.11.6 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4004\"\u003e#4004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/127f79f7b456450729914950ec2a063c02699b9c\"\u003e\u003ccode\u003e127f79f\u003c/code\u003e\u003c/a\u003e docs: Highlight new examples in the gallery (\u003ca href=\"https://redirect.github.com/vega/altair/issues/3999\"\u003e#3999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/59561f8fee41d0d1d872f9dba855cc36651c869e\"\u003e\u003ccode\u003e59561f8\u003c/code\u003e\u003c/a\u003e fix: Compute unique hashes for identical specs that use different data (\u003ca href=\"https://redirect.github.com/vega/altair/issues/3982\"\u003e#3982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/60a3fb7da35b5f4b9c715b85e6a81c0154df7cc9\"\u003e\u003ccode\u003e60a3fb7\u003c/code\u003e\u003c/a\u003e build(deps): bump tornado from 6.5.4 to 6.5.5 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/3978\"\u003e#3978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/33bc6379e7c0e38f92a04a84ed52d39c02fb3f38\"\u003e\u003ccode\u003e33bc637\u003c/code\u003e\u003c/a\u003e build(deps): bump cryptography from 46.0.6 to 46.0.7 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4003\"\u003e#4003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/88c446951eb48c13c8078a392f4d79e8b63453d2\"\u003e\u003ccode\u003e88c4469\u003c/code\u003e\u003c/a\u003e docs: Create docs CLI to facilitate different build combinations (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4000\"\u003e#4000\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/a4a20ccc898c487fe80e3c7118bafb58872df113\"\u003e\u003ccode\u003ea4a20cc\u003c/code\u003e\u003c/a\u003e docs: Add watch option to automatically rebuild docs upon detected changes (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/vega/altair/compare/v6.0.0...v6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.12.1 to 4.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9\u003c/li\u003e\n\u003cli\u003eAdded a \u003ccode\u003ettl\u003c/code\u003e parameter to the \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e wrapper (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1073\"\u003e#1073\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWidened the type annotations of file I/O streams to accept \u003ccode\u003eIO[bytes]\u003c/code\u003e instead of just \u003ccode\u003eBinaryIO\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1078\"\u003e#1078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.Path\u003c/code\u003e not being compatible with Python 3.15 due to the removal of \u003ccode\u003epathlib.Path.is_reserved()\u003c/code\u003e and the addition of \u003ccode\u003epathlib.Path.__vfspath__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1061\"\u003e#1061\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eBrokenResourceError\u003c/code\u003e raised by the asyncio \u003ccode\u003eSocketStream\u003c/code\u003e not having the original exception as its cause (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1055\"\u003e#1055\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eTypeError\u003c/code\u003e raised when using \u0026quot;func\u0026quot; as a parameter name in \u003ccode\u003epytest.mark.parametrize\u003c/code\u003e when using the pytest plugin (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1068\"\u003e#1068\u003c/a\u003e; PR by \u003ca href=\"https://github.com/JohnnyDeuss\"\u003e\u003ccode\u003e@​JohnnyDeuss\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the pytest plugin not running tests that had the \u003ccode\u003eanyio\u003c/code\u003e marker added programmatically via \u003ccode\u003epytest_collection_modifyitems\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/422\"\u003e#422\u003c/a\u003e; PR by \u003ca href=\"https://github.com/chbndrhnns\"\u003e\u003ccode\u003e@​chbndrhnns\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when they are contained in an exception group alongside non-cancellation exceptions (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1091\"\u003e#1091\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCondition.wait()\u003c/code\u003e not passing on a notification when the task is cancelled but already received a notification\u003c/li\u003e\n\u003cli\u003eFixed inverted condition in the process pool shutdown phase which would cause still-running pooled processes not to be terminated (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1074\"\u003e#1074\u003c/a\u003e; PR by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/afbe93ca9d0c447adf26e9c1715ac20870622bf2\"\u003e\u003ccode\u003eafbe93c\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/33bdf2e4b4f40c2df178123746147a6d2471808d\"\u003e\u003ccode\u003e33bdf2e\u003c/code\u003e\u003c/a\u003e Rearranged the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/19e09e25bc5a23dd78a577d8c3909dd377057c78\"\u003e\u003ccode\u003e19e09e2\u003c/code\u003e\u003c/a\u003e Fixed inverted condition in _forcibly_shutdown_process_pool_on_exit (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1074\"\u003e#1074\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9369d80b9e8292f2a892a9d5c73923c6a28aa08c\"\u003e\u003ccode\u003e9369d80\u003c/code\u003e\u003c/a\u003e Fixed Condition.wait() not handing over notification when cancelled\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f122abdc6f6b166c6b6ac27d36d55cdf8fa08e8\"\u003e\u003ccode\u003e6f122ab\u003c/code\u003e\u003c/a\u003e Fixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/beaa45aff568a4020f2faf317321dd92f0e1f4a0\"\u003e\u003ccode\u003ebeaa45a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1097\"\u003e#1097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/602f6606dcf3f37702686a4f3e161328c537b07f\"\u003e\u003ccode\u003e602f660\u003c/code\u003e\u003c/a\u003e Widened type annotations to accept IO[bytes] in file streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b5dcd45170701a756ba634197398f05d4710cab3\"\u003e\u003ccode\u003eb5dcd45\u003c/code\u003e\u003c/a\u003e Added note about erasing the template\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d68670b3b4e0917d4caff2de082e03220f3e05a1\"\u003e\u003ccode\u003ed68670b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1090\"\u003e#1090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/fc17a22dd948e6a3d90d99908813f0010dfc3d2c\"\u003e\u003ccode\u003efc17a22\u003c/code\u003e\u003c/a\u003e tweak to_thread docs about abandon_on_cancel (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1088\"\u003e#1088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.12.1...4.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `async-lru` from 2.1.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/aio-libs/async-lru/releases\"\u003easync-lru's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.3.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003ecache_contains()\u003c/code\u003e for read-only key lookup.\u003c/li\u003e\n\u003cli\u003eChanged cross-loop cache access to auto-reset and rebind to the current event loop.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003eAlruCacheLoopResetWarning\u003c/code\u003e when an auto-reset happens due to event loop change.\u003c/li\u003e\n\u003cli\u003eForwarded \u003ccode\u003ecache_close(wait=...)\u003c/code\u003e for bound methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a \u003ccode\u003ejitter\u003c/code\u003e parameter to randomise TTL.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eRuntimeError\u003c/code\u003e when cache is used by different loop.\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/aio-libs/async-lru/blob/master/CHANGES.rst\"\u003easync-lru's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.3.0 (2026-03-18)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003ecache_contains()\u003c/code\u003e for read-only key lookup.\u003c/li\u003e\n\u003cli\u003eChanged cross-loop cache access to auto-reset and rebind to the current event loop.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003eAlruCacheLoopResetWarning\u003c/code\u003e when an auto-reset happens due to event loop change.\u003c/li\u003e\n\u003cli\u003eForwarded \u003ccode\u003ecache_close(wait=...)\u003c/code\u003e for bound methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e2.2.0 (2026-02-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a \u003ccode\u003ejitter\u003c/code\u003e parameter to randomise TTL.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eRuntimeError\u003c/code\u003e when cache is used by different loop.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/cb9e034619167668af09c7be71a37e2d40a96995\"\u003e\u003ccode\u003ecb9e034\u003c/code\u003e\u003c/a\u003e Release v2.3.0 (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/748\"\u003e#748\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/a2aa7b05ce9b773539f1c479341ac1c53f1fe9d0\"\u003e\u003ccode\u003ea2aa7b0\u003c/code\u003e\u003c/a\u003e build(deps): bump coverage from 7.13.4 to 7.13.5 (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/747\"\u003e#747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/63760a481d44d5a2cc0d1325fc2ca233b664367a\"\u003e\u003ccode\u003e63760a4\u003c/code\u003e\u003c/a\u003e feat: add cache_contains() for read-only key lookup (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/746\"\u003e#746\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/e2ddf7af72e2eb7382182dbdde7578142f0124be\"\u003e\u003ccode\u003ee2ddf7a\u003c/code\u003e\u003c/a\u003e Forward cache_close(wait=...) for bound methods (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/745\"\u003e#745\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/33e1a7cec396bcf612f46226253775fd905b40eb\"\u003e\u003ccode\u003e33e1a7c\u003c/code\u003e\u003c/a\u003e Emit AlruCacheLoopResetWarning on event loop auto-reset (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/744\"\u003e#744\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/fff4d49334839987946c74bfc02c05f79427e8b2\"\u003e\u003ccode\u003efff4d49\u003c/code\u003e\u003c/a\u003e feat: Allow \u003ccode\u003ealru_cache\u003c/code\u003e to automatically clear and rebind to the current eve...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/7ef00b766b35da224a5e652f344e3788663a6f5a\"\u003e\u003ccode\u003e7ef00b7\u003c/code\u003e\u003c/a\u003e Release v2.2.0 (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/01db639c22c8c18ad41a026dacf301722deb3a32\"\u003e\u003ccode\u003e01db639\u003c/code\u003e\u003c/a\u003e fix: avoid binding loop for invalid cache keys (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/740\"\u003e#740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/c6acbe807f69324b66c6e3327d6ace5ecea02da4\"\u003e\u003ccode\u003ec6acbe8\u003c/code\u003e\u003c/a\u003e build(deps): bump pytest-codspeed from 4.2.0 to 4.3.0 (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/738\"\u003e#738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/async-lru/commit/8783cf7a12ceef22eefd028bb6d7ad096a977b47\"\u003e\u003ccode\u003e8783cf7\u003c/code\u003e\u003c/a\u003e build(deps): bump coverage from 7.13.3 to 7.13.4 (\u003ca href=\"https://redirect.github.com/aio-libs/async-lru/issues/737\"\u003e#737\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/aio-libs/async-lru/compare/v2.1.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `attrs` from 25.4.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-attrs/attrs/releases\"\u003eattrs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.1.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main outward change here only affects people using field transformers, but it should be a nice quality of life improvement!\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://kraken.tech\"\u003eKraken Tech\u003c/a\u003e (@\u003ca href=\"https://github.com/kraken-tech\"\u003ekraken-tech\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://ecosyste.ms\"\u003eEcosystems\u003c/a\u003e (@\u003ca href=\"https://github.com/ecosyste-ms\"\u003eecosyste-ms\u003c/a\u003e), \u003ca href=\"https://www.lambdatest.com\"\u003eTestMu AI Open Source Office (Formerly LambdaTest)\u003c/a\u003e (@\u003ca href=\"https://github.com/LambdaTest-Inc\"\u003eLambdaTest-Inc\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://miketheman.dev\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://bmdphd.info/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Celebrity News AG (@\u003ca href=\"https://github.com/celebritynewsag\"\u003ecelebritynewsag\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eBackwards-incompatible Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eField aliases are now resolved \u003cem\u003ebefore\u003c/em\u003e calling \u003ccode\u003efield_transformer\u003c/code\u003e, so transformers receive fully populated \u003ccode\u003eAttribute\u003c/code\u003e objects with usable \u003ccode\u003ealias\u003c/code\u003e values instead of \u003ccode\u003eNone\u003c/code\u003e. The new \u003ccode\u003eAttribute.alias_is_default\u003c/code\u003e flag indicates whether the alias was auto-generated (\u003ccode\u003eTrue\u003c/code\u003e) or explicitly set by the user (\u003ccode\u003eFalse\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1509\"\u003e#1509\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanges\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix type annotations for \u003ccode\u003eattrs.validators.optional()\u003c/code\u003e, so it no longer rejects tuples with more than one validator. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1496\"\u003e#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003eattrs.validators.disabled()\u003c/code\u003e contextmanager can now be nested. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1513\"\u003e#1513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFrozen classes can set \u003ccode\u003eon_setattr=attrs.setters.NO_OP\u003c/code\u003e in addition to \u003ccode\u003eNone\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1515\"\u003e#1515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIt's now possible to pass \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003einstances\u003c/strong\u003e in addition to \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003eclasses\u003c/strong\u003e to \u003ccode\u003eattrs.fields()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1529\"\u003e#1529\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/DavidCEllis\"\u003e\u003ccode\u003e@​DavidCEllis\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/finite-state-machine\"\u003e\u003ccode\u003e@​finite-state-machine\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/vstinner\"\u003e\u003ccode\u003e@​vstinner\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/attrs\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner python-attrs attrs-26.1.0.tar.gz\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-attrs/attrs/blob/main/CHANGELOG.md\"\u003eattrs's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/python-attrs/attrs/tree/26.1.0\"\u003e26.1.0\u003c/a\u003e - 2026-03-19\u003c/h2\u003e\n\u003ch3\u003eBackwards-incompatible Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eField aliases are now resolved \u003cem\u003ebefore\u003c/em\u003e calling \u003ccode\u003efield_transformer\u003c/code\u003e, so transformers receive fully populated \u003ccode\u003eAttribute\u003c/code\u003e objects with usable \u003ccode\u003ealias\u003c/code\u003e values instead of \u003ccode\u003eNone\u003c/code\u003e.\nThe new \u003ccode\u003eAttribute.alias_is_default\u003c/code\u003e flag indicates whether the alias was auto-generated (\u003ccode\u003eTrue\u003c/code\u003e) or explicitly set by the user (\u003ccode\u003eFalse\u003c/code\u003e).\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1509\"\u003e#1509\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanges\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix type annotations for \u003ccode\u003eattrs.validators.optional()\u003c/code\u003e, so it no longer rejects tuples with more than one validator.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1496\"\u003e#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003eattrs.validators.disabled()\u003c/code\u003e contextmanager can now be nested.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1513\"\u003e#1513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFrozen classes can set \u003ccode\u003eon_setattr=attrs.setters.NO_OP\u003c/code\u003e in addition to \u003ccode\u003eNone\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1515\"\u003e#1515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIt's now possible to pass \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003einstances\u003c/strong\u003e in addition to \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003eclasses\u003c/strong\u003e to \u003ccode\u003eattrs.fields()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1529\"\u003e#1529\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/7bfc49e9b22d5ba25b6e429524c3d49fee27cb36\"\u003e\u003ccode\u003e7bfc49e\u003c/code\u003e\u003c/a\u003e Prepare 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/31e02869da10824b492c378c1dc87ccc720ee5ad\"\u003e\u003ccode\u003e31e0286\u003c/code\u003e\u003c/a\u003e Update test_validators.py for Python 3.15a7 (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1530\"\u003e#1530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/48b8611c27779811d161200e17de8da24aae7feb\"\u003e\u003ccode\u003e48b8611\u003c/code\u003e\u003c/a\u003e Add instance support to attrs.fields() (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1529\"\u003e#1529\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/3a68d4913221abc6f8ad3be50937f7ae49300a98\"\u003e\u003ccode\u003e3a68d49\u003c/code\u003e\u003c/a\u003e dev: document missing git tags failure mode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/a572c3a4c558a8b9b48cf989fcd956ab1a279439\"\u003e\u003ccode\u003ea572c3a\u003c/code\u003e\u003c/a\u003e Allow field(on_setattr=NO_OP) on frozen classes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/af9c510912ce604a94896cc35c27368d5baf6ae6\"\u003e\u003ccode\u003eaf9c510\u003c/code\u003e\u003c/a\u003e Fix validators.disabled() to save/restore state on nesting (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1513\"\u003e#1513\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/ab7f8b2f4c0f747d5b1575247ce35e5adaad182e\"\u003e\u003ccode\u003eab7f8b2\u003c/code\u003e\u003c/a\u003e update dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/ce89f5d11feb0805da9ed10bb165238cc959f1bb\"\u003e\u003ccode\u003ece89f5d\u003c/code\u003e\u003c/a\u003e Fix message passing in frozen errors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/eccd966d80aff5196efc959316961cfa780439f9\"\u003e\u003ccode\u003eeccd966\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eoptional\u003c/code\u003e validator to accept tuples of len \u0026gt; 1 (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1496\"\u003e#1496\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/e92fe52dfe1eb07167e6473724c5a8ada978add0\"\u003e\u003ccode\u003ee92fe52\u003c/code\u003e\u003c/a\u003e policies: tighten screws (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1528\"\u003e#1528\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-attrs/attrs/compare/25.4.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cachetools` from 6.2.6 to 7.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst\"\u003ecachetools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev7.1.0 (2026-05-01)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd type stubs based on the work of the good people at \u003ccode\u003etypeshed \u0026lt;https://github.com/python/typeshed/tree/main/stubs/cachetools/\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate unit tests.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.6 (2026-04-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eMinor code improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate project URLs.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate CI environment.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.5 (2026-03-09)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMinor \u003ccode\u003e@cachedmethod\u003c/code\u003e performance improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.4 (2026-03-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix and properly document \u003ccode\u003e@cachedmethod.cache_key\u003c/code\u003e behavior.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMinor documentation improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.3 (2026-03-05)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eDeprecationWarning\u003c/code\u003e when creating an autospec mock with\n\u003ccode\u003e@cachedmethod\u003c/code\u003e decorations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.2 (2026-03-02)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eProvide more efficient \u003ccode\u003eclear()\u003c/code\u003e implementation for all support\nCache classes (courtesy Josep Pon Farreny).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.1 (2026-02-10)\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/tkem/cachetools/commit/1ea3422e058ef8b6b7dc15beb9d44d8f7c195a62\"\u003e\u003ccode\u003e1ea3422\u003c/code\u003e\u003c/a\u003e Bump release date.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/d9874465a6ab6f9d1d56cef91370f9c237a7eca6\"\u003e\u003ccode\u003ed987446\u003c/code\u003e\u003c/a\u003e Release v7.1.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/3d79e80a4a54892d1552cd17da8e27920c1918d8\"\u003e\u003ccode\u003e3d79e80\u003c/code\u003e\u003c/a\u003e Update Copilot Instructions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/83fe6bc78d0155a0036dda8a8eb1a2ddb8f26c60\"\u003e\u003ccode\u003e83fe6bc\u003c/code\u003e\u003c/a\u003e Add tox pyright check.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/bd3fbc49212eb948e08e9c478e5901f1293fd1f4\"\u003e\u003ccode\u003ebd3fbc4\u003c/code\u003e\u003c/a\u003e Improve typing support.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/09dd6fec4b1b2339451ab26d1ca3c7a049b8c38c\"\u003e\u003ccode\u003e09dd6fe\u003c/code\u003e\u003c/a\u003e Improve original type stubs from typeshed.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/873c7013ea92b16f2f24a6001e625fabfdf951a5\"\u003e\u003ccode\u003e873c701\u003c/code\u003e\u003c/a\u003e Add typeshed typings.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/28d4506f2a49d781ffbcecb095fa7aba5bb80aff\"\u003e\u003ccode\u003e28d4506\u003c/code\u003e\u003c/a\u003e Release v7.0.6.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/51921a4812b3304be9625ed004f024935a8036af\"\u003e\u003ccode\u003e51921a4\u003c/code\u003e\u003c/a\u003e Remove _TimedCache default timer to simplify type stubs.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/a4249f6aa3b4cb2fe287b08631c308bb88b9396c\"\u003e\u003ccode\u003ea4249f6\u003c/code\u003e\u003c/a\u003e Bump codecov/codecov-action from 5.5.2 to 6.0.0 (\u003ca href=\"https://redirect.github.com/tkem/cachetools/issues/392\"\u003e#392\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tkem/cachetools/compare/v6.2.6...v7.1.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.1.4 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\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/8571a4ba5205675107f9026d0008ad2d7a2778bf\"\u003e\u003ccode\u003e8571a4b\u003c/code\u003e\u003c/a\u003e 2026.02.25 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/395\"\u003e#395\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6f7de00579d292af565bbb8a947643219794eb6d\"\u003e\u003ccode\u003e6f7de00\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.0.0 to 8.1.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/390\"\u003e#390\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/a1de59b15105cad768afed4f066b36171134f04a\"\u003e\u003ccode\u003ea1de59b\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.1 to 6.0.2 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/391\"\u003e#391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.01.04...2026.04.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.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 `cryptography` from 46.0.7 to 47.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e47.0.0 - 2026-04-24\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for Python 3.8 is deprecated and will be removed in the next\n  ``cryptography`` release.\n* **BACKWARDS INCOMPATIBLE:** Support for binary elliptic curves\n  (``SECT*`` classes) has been removed. These curves are rarely used and\n  have additional security considerations that make them undesirable.\n* **BACKWARDS INCOMPATIBLE:** Support for OpenSSL 1.1.x has been removed.\n  OpenSSL 3.0.0 or later is now required. LibreSSL, BoringSSL, and AWS-LC\n  continue to be supported.\n* **BACKWARDS INCOMPATIBLE:** Dropped support for LibreSSL \u0026lt; 4.1.\n* **BACKWARDS INCOMPATIBLE:** Loading keys with unsupported algorithms or\n  keys with unsupported explicit curve encodings now raises\n  :class:`~cryptography.exceptions.UnsupportedAlgorithm` instead of\n  ``ValueError``. This change affects\n  :func:`~cryptography.hazmat.primitives.serialization.load_pem_private_key`,\n  :func:`~cryptography.hazmat.primitives.serialization.load_der_private_key`,\n  :func:`~cryptography.hazmat.primitives.serialization.load_pem_public_key`,\n  :func:`~cryptography.hazmat.primitives.serialization.load_der_public_key`,\n  and :meth:`~cryptography.x509.Certificate.public_key` when called on\n  certificates with unsupported public key algorithms.\n* **BACKWARDS INCOMPATIBLE:** When parsing elliptic curve private keys, we now\n  reject keys that incorrectly encode a private key of the wrong length because\n  such keys are impossible to process in a constant-time manner. We do not\n  believe keys with this problem are in wide use, however we may revert this\n  change based on the feedback we receive.\n* Deprecated passing 64-bit (8-byte) and 128-bit (16-byte) keys to\n  :class:`~cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES`. In a\n  future release, only 192-bit (24-byte) keys will be accepted. Users should\n  expand shorter keys themselves (e.g., for single DES: ``key + key + key``,\n  for two-key: ``key + key[:8]``).\n* Updated the minimum supported Rust version (MSRV) to 1.83.0, from 1.74.0.\n* Support for ``x86_64`` macOS (including publishing wheels) is deprecated\n  and will be removed in the next release. We will switch to publishing an\n  ``arm64`` only wheel for macOS.\n* Support for 32-bit Windows (including publishing wheels) is deprecated\n  and will be removed in the next release. Users should move to a 64-bit\n  Python installation.\n* ``public_bytes`` and ``private_bytes`` methods on keys now raise\n  ``TypeError`` (instead of ``ValueError``) if an invalid encoding is provided\n  for the given ``format``.\n* Moved :class:`~cryptography.hazmat.decrepit.ciphers.modes.CFB`,\n  :cla...\n\n_Description has been truncated_","html_url":"https://github.com/SatyamKumarCS/Default-Credit-Card-Prediction/pull/7","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/SatyamKumarCS%2FDefault-Credit-Card-Prediction/issues/7","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/7/packages"}},{"old_version":"\u003e=2.0.7","new_version":"\u003e=4.1.0","update_type":"minor","path":"/backend","pr_created_at":"2026-05-02T13:29:25.000Z","version_change":"\u003e=2.0.7 → \u003e=4.1.0","issue":{"uuid":"4369014345","node_id":"PR_kwDOPiIgt87XpOQJ","number":205,"state":"open","title":"deps(deps): update python-json-logger requirement from \u003e=2.0.7 to \u003e=4.1.0 in /backend","user":"dependabot[bot]","labels":[],"assignees":["drsapaev"],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-02T13:29:25.000Z","updated_at":"2026-05-02T13:32:14.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(deps): update","packages":[{"name":"python-json-logger","old_version":"\u003e=2.0.7","new_version":"\u003e=4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":"/backend","ecosystem":"pip"},"body":"Updates the requirements on [python-json-logger](https://github.com/nhairs/python-json-logger) 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/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.0...v3.2.1\"\u003e3.2.1\u003c/a\u003e - 2024-12-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImport error on \u003ccode\u003eimport pythonjsonlogger.jsonlogger\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/29\"\u003e#29\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/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v2.0.7...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore 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/drsapaev/final/pull/205","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/drsapaev%2Ffinal/issues/205","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/205/packages"}},{"old_version":"4.0.0","new_version":"4.1.0","update_type":"minor","path":null,"pr_created_at":"2026-04-26T21:05:13.000Z","version_change":"4.0.0 → 4.1.0","issue":{"uuid":"4331979472","node_id":"PR_kwDOMt9I9c7VxRRl","number":130,"state":"closed","title":"[pip] (deps): Bump the dev-dependencies group across 1 directory with 17 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-10T21:04:32.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-26T21:05:13.000Z","updated_at":"2026-05-10T21:04:34.000Z","time_to_close":1209559,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"[pip] (deps): Bump","group_name":"dev-dependencies","update_count":17,"packages":[{"name":"python-json-logger","old_version":"4.0.0","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"charset-normalizer","old_version":"3.4.6","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"idna","old_version":"3.11","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"pychoir","old_version":"0.0.29","new_version":"0.0.30","repository_url":"https://github.com/kajaste/pychoir"},{"name":"requests","old_version":"2.33.0","new_version":"2.33.1","repository_url":"https://github.com/psf/requests"},{"name":"filelock","old_version":"3.25.2","new_version":"3.29.0","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"identify","old_version":"2.6.18","new_version":"2.6.19","repository_url":"https://github.com/pre-commit/identify"},{"name":"packaging","old_version":"26.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"platformdirs","old_version":"4.9.4","new_version":"4.9.6","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"pre-commit","old_version":"4.5.1","new_version":"4.6.0","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pygments","old_version":"2.19.2","new_version":"2.20.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pyright","old_version":"1.1.408","new_version":"1.1.409","repository_url":"https://github.com/RobertCraigie/pyright-python"},{"name":"pytest","old_version":"9.0.2","new_version":"9.0.3","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-randomly","old_version":"4.0.1","new_version":"4.1.0","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"ruff","old_version":"0.15.7","new_version":"0.15.12","repository_url":"https://github.com/astral-sh/ruff"},{"name":"virtualenv","old_version":"21.2.0","new_version":"21.2.4","repository_url":"https://github.com/pypa/virtualenv"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dev-dependencies group with 17 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `4.0.0` | `4.1.0` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.4.22` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.6` | `3.4.7` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.13` |\n| [pychoir](https://github.com/kajaste/pychoir) | `0.0.29` | `0.0.30` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.33.1` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.25.2` | `3.29.0` |\n| [identify](https://github.com/pre-commit/identify) | `2.6.18` | `2.6.19` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.2` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.4` | `4.9.6` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.5.1` | `4.6.0` |\n| [pygments](https://github.com/pygments/pygments) | `2.19.2` | `2.20.0` |\n| [pyright](https://github.com/RobertCraigie/pyright-python) | `1.1.408` | `1.1.409` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.2` | `9.0.3` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `4.0.1` | `4.1.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.7` | `0.15.12` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `21.2.0` | `21.2.4` |\n\n\nUpdates `python-json-logger` from 4.0.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\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/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.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 `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 `pychoir` from 0.0.29 to 0.0.30\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kajaste/pychoir/releases\"\u003epychoir's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eThirtieth release\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.14\u003c/li\u003e\n\u003cli\u003eDev deps update\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kajaste/pychoir/commit/99ff3e53501eec9926d2983ef235df19b198fa18\"\u003e\u003ccode\u003e99ff3e5\u003c/code\u003e\u003c/a\u003e Upgrade dev deps\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kajaste/pychoir/commit/33c9ef8a18903498945e83df576e768af1a7bc3a\"\u003e\u003ccode\u003e33c9ef8\u003c/code\u003e\u003c/a\u003e Python 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kajaste/pychoir/commit/1089c0a6ec678127d9df24459868363002f8b77a\"\u003e\u003ccode\u003e1089c0a\u003c/code\u003e\u003c/a\u003e Automatic package versioning from tag\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/kajaste/pychoir/compare/v0.0.29...v0.0.30\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.0 to 2.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\u003c/blockquote\u003e\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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.0...v2.33.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.25.2 to 3.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.29.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(async): use single-thread executor for lock consistency by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/533\"\u003etox-dev/filelock#533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(soft): enable stale lock detection on Windows by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/534\"\u003etox-dev/filelock#534\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.28.0...3.29.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.28.0...3.29.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.28.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): unbreak release workflow, publish to PyPI again by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/529\"\u003etox-dev/filelock#529\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.27.0...3.28.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.27.0...3.28.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.27.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(rw): add SoftReadWriteLock for NFS and HPC clusters by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/528\"\u003etox-dev/filelock#528\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.26.1...3.27.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.26.1...3.27.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.26.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(asyncio): add \u003cstrong\u003eexit\u003c/strong\u003e to BaseAsyncFileLock and fix \u003cstrong\u003edel\u003c/strong\u003e loop handling by \u003ca href=\"https://github.com/naarob\"\u003e\u003ccode\u003e@​naarob\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/518\"\u003etox-dev/filelock#518\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/naarob\"\u003e\u003ccode\u003e@​naarob\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/518\"\u003etox-dev/filelock#518\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.26.0...3.26.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.26.0...3.26.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.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🔒 ci(workflows): add zizmor security auditing by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/517\"\u003etox-dev/filelock#517\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 fix(ci): restore git credentials for release job by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/520\"\u003etox-dev/filelock#520\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(soft): add PID inspection and lock breaking by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/524\"\u003etox-dev/filelock#524\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.25.2...3.26.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.25.2...3.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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.0 (2026-04-19)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(soft): enable stale lock detection on Windows :pr:\u003ccode\u003e534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(async): use single-thread executor for lock consistency :pr:\u003ccode\u003e533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 :pr:\u003ccode\u003e530\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.28.0 (2026-04-14)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): unbreak release workflow, publish to PyPI again :pr:\u003ccode\u003e529\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.26.1 (2026-04-09)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(asyncio): add \u003cstrong\u003eexit\u003c/strong\u003e to BaseAsyncFileLock and fix \u003cstrong\u003edel\u003c/strong\u003e loop handling :pr:\u003ccode\u003e518\u003c/code\u003e - by :user:\u003ccode\u003enaarob\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 :pr:\u003ccode\u003e525\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.26.0 (2026-04-06)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(soft): add PID inspection and lock breaking :pr:\u003ccode\u003e524\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e523\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 7.6.0 to 8.0.0 :pr:\u003ccode\u003e522\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove persist-credentials: false from release job :pr:\u003ccode\u003e520\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e519\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 ci(workflows): add zizmor security auditing :pr:\u003ccode\u003e517\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e516\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e514\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.25.2 (2026-03-11)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(unix): suppress EIO on close in Docker bind mounts :pr:\u003ccode\u003e513\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.25.1 (2026-03-09)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e510\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(win): restore best-effort lock file cleanup on release :pr:\u003ccode\u003e511\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/469b47f192b0a9f8c8b795d9b9f57212c716959b\"\u003e\u003ccode\u003e469b47f\u003c/code\u003e\u003c/a\u003e Release 3.29.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/e85d07281987e0855ba67c03dfdef342ec1097d5\"\u003e\u003ccode\u003ee85d072\u003c/code\u003e\u003c/a\u003e ✨ feat(soft): enable stale lock detection on Windows (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/534\"\u003e#534\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f5ee1712ced6916b2768812ee378183319339944\"\u003e\u003ccode\u003ef5ee171\u003c/code\u003e\u003c/a\u003e 🐛 fix(async): use single-thread executor for lock consistency (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/533\"\u003e#533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/2a954588cdf462a786835eeb102240ce79fecc8b\"\u003e\u003ccode\u003e2a95458\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/530\"\u003e#530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/55de20c0819652362881906fa289feff5a323c19\"\u003e\u003ccode\u003e55de20c\u003c/code\u003e\u003c/a\u003e Release 3.28.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/476b0e4a92776fe530b5d993247342f039004174\"\u003e\u003ccode\u003e476b0e4\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): unbreak release workflow, publish to PyPI again (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/529\"\u003e#529\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/824713edc32b54efd66566907f97c1238502810e\"\u003e\u003ccode\u003e824713e\u003c/code\u003e\u003c/a\u003e ✨ feat(rw): add SoftReadWriteLock for NFS and HPC clusters (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/528\"\u003e#528\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/9879de9298db93ffba0a9f58d9de75e9e2a00fc1\"\u003e\u003ccode\u003e9879de9\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/527\"\u003e#527\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/4cfab498b6916f89be46152efa4a72e9731be98f\"\u003e\u003ccode\u003e4cfab49\u003c/code\u003e\u003c/a\u003e Release 3.26.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/734c9f26e8107ad24886129fc68865f0b46cf71f\"\u003e\u003ccode\u003e734c9f2\u003c/code\u003e\u003c/a\u003e 🐛 fix(asyncio): add \u003cstrong\u003eexit\u003c/strong\u003e to BaseAsyncFileLock and fix \u003cstrong\u003edel\u003c/strong\u003e loop handli...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.25.2...3.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `identify` from 2.6.18 to 2.6.19\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/identify/commit/b39f637a1b9032568e5b21b0474c3583acf1c530\"\u003e\u003ccode\u003eb39f637\u003c/code\u003e\u003c/a\u003e v2.6.19\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/identify/commit/c9768886c7fc78a2f8c7d0d9447064ff7a008eb9\"\u003e\u003ccode\u003ec976888\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/identify/issues/588\"\u003e#588\u003c/a\u003e from hofbi/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/identify/commit/6110d73a67ca4807b6331d21784a92313b9c082b\"\u003e\u003ccode\u003e6110d73\u003c/code\u003e\u003c/a\u003e Add support for 'tif' file extension\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/identify/commit/ccbd337ae1b4c0d03565cd6dd64076c0b4ff7929\"\u003e\u003ccode\u003eccbd337\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/identify/issues/587\"\u003e#587\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/identify/commit/f5af2649530b5cbfdfcf6ac9d3e4f65e198747c2\"\u003e\u003ccode\u003ef5af264\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/identify/commit/a0be59827ac05537a9f8a4e1895133d44f2a4319\"\u003e\u003ccode\u003ea0be598\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/identify/issues/586\"\u003e#586\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/identify/commit/b1840430b285dab369b4b96480614cf429a6a50e\"\u003e\u003ccode\u003eb184043\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pre-commit/identify/compare/v2.6.18...v2.6.19\"\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 `platformdirs` from 4.9.4 to 4.9.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/platformdirs/releases\"\u003eplatformdirs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.9.6\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(release): use double quotes for tag variable expansion by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/477\"\u003etox-dev/platformdirs#477\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/platformdirs/compare/4.9.5...4.9.6\"\u003ehttps://github.com/tox-dev/platformdirs/compare/4.9.5...4.9.6\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/platformdirs/blob/main/docs/changelog.rst\"\u003eplatformdirs's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e4.9.6 (2026-04-09)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(release): use double quotes for tag variable expansion :pr:\u003ccode\u003e477\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e4.9.5 (2026-04-06)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e📝 docs(appauthor): clarify None vs False on Windows :pr:\u003ccode\u003e476\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSeparates implementations of macOS dirs that share a default :pr:\u003ccode\u003e473\u003c/code\u003e - by :user:\u003ccode\u003eGoddesen\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove persist-credentials: false from release job :pr:\u003ccode\u003e472\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003efix: do not duplicate site dirs in Unix.iter_{config,site}_dirs() when use_site_for_root is active :pr:\u003ccode\u003e469\u003c/code\u003e - by\n:user:\u003ccode\u003eviccie30\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 fix(type): resolve ty 0.0.25 type errors :pr:\u003ccode\u003e468\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 ci(workflows): add zizmor security auditing :pr:\u003ccode\u003e467\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(release): generate docstrfmt-compatible changelog entries :pr:\u003ccode\u003e463\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e4.9.4 (2026-03-05)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e461\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate README.md\u003c/li\u003e\n\u003cli\u003e📝 docs: add project logo to documentation :pr:\u003ccode\u003e459\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStandardize .github files to .yaml suffix\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump the all group with 2 updates :pr:\u003ccode\u003e457\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMove SECURITY.md to .github/SECURITY.md\u003c/li\u003e\n\u003cli\u003eAdd permissions to workflows :pr:\u003ccode\u003e455\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd security policy\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e454\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e4.9.2 (2026-02-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e📝 docs: restructure following Diataxis framework :pr:\u003ccode\u003e448\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e📝 docs(platforms): fix RST formatting and TOC hierarchy :pr:\u003ccode\u003e447\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e4.9.1 (2026-02-14)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e📝 docs: enhance README, fix issues, and reorganize platforms.rst :pr:\u003ccode\u003e445\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/56efd776d68a94898b319c108933d0cfbff813af\"\u003e\u003ccode\u003e56efd77\u003c/code\u003e\u003c/a\u003e Release 4.9.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/d5d812a02102c633a39f3dfdddbc6bb1670b13ae\"\u003e\u003ccode\u003ed5d812a\u003c/code\u003e\u003c/a\u003e 🐛 fix(release): use double quotes for tag variable expansion (\u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/c2b0cee3a8261b3a75b283b9ef148d2425d48d35\"\u003e\u003ccode\u003ec2b0cee\u003c/code\u003e\u003c/a\u003e build(deps): bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 in the al...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/7688069a09e03bb4e97fe0f9cf3aebedc8a6f7f9\"\u003e\u003ccode\u003e7688069\u003c/code\u003e\u003c/a\u003e Release 4.9.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/104d28b48c59b327a7832b23509187eef2764af8\"\u003e\u003ccode\u003e104d28b\u003c/code\u003e\u003c/a\u003e 📝 docs(appauthor): clarify None vs False on Windows (\u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/issues/476\"\u003e#476\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/0955048684241725bb2eae8a2ba5bc7f7f46c9a0\"\u003e\u003ccode\u003e0955048\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/bd3c76602f88284eb832c7f5297c354ea7ac5906\"\u003e\u003ccode\u003ebd3c766\u003c/code\u003e\u003c/a\u003e build(deps): bump astral-sh/setup-uv from 7.6.0 to 8.0.0 in the all group (\u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/issues/474\"\u003e#474\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/749ac3f33ffc5af04fb8bb046bbbcc4d5aa562c9\"\u003e\u003ccode\u003e749ac3f\u003c/code\u003e\u003c/a\u003e Separates implementations of macOS dirs that share a default (\u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/issues/473\"\u003e#473\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/cb8815684f15c58ad1b87c8b1d34f9bf2d79780e\"\u003e\u003ccode\u003ecb88156\u003c/code\u003e\u003c/a\u003e Remove persist-credentials: false from release job (\u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/issues/472\"\u003e#472\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/platformdirs/commit/a501eabd7dd0e56116c38fa9dba15f3c0b60010a\"\u003e\u003ccode\u003ea501eab\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/platformdirs/compare/4.9.4...4.9.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 4.5.1 to 4.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.6.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier usage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.6.0 - 2026-04-21\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier\nusage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f35134b05028ec938ac605ae500fdf95462655d3\"\u003e\u003ccode\u003ef35134b\u003c/code\u003e\u003c/a\u003e v4.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2a51ffcb81f6c8ed2e6467913c3343a8800f3ab9\"\u003e\u003ccode\u003e2a51ffc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e from pre-commit/hook-impl-optional-hook-dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/d7dee322abfc765b042f2e3b872aab3c3a867610\"\u003e\u003ccode\u003ed7dee32\u003c/code\u003e\u003c/a\u003e make --hook-dir optional for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/965aeb1c680e8b526342153547f0ec014484c63d\"\u003e\u003ccode\u003e965aeb1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e from pre-commit/hook-impl-required\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2eacc064aa9b5bb33d3a0d84a234b475e34f3096\"\u003e\u003ccode\u003e2eacc06\u003c/code\u003e\u003c/a\u003e --hook-type is required for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f5678bf4ac35cffc0ff7174ad85f7fdc2a5c977e\"\u003e\u003ccode\u003ef5678bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3657\"\u003e#3657\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/054cc5bd6bb1b20faa1eefe09f0de3b68fceee94\"\u003e\u003ccode\u003e054cc5b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/5c0f3024d2524f6e029a4c333392fd9be9fb27f6\"\u003e\u003ccode\u003e5c0f302\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3652\"\u003e#3652\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/a5d91142676630f8130020b35e166e0c0e92b8f4\"\u003e\u003ccode\u003ea5d9114\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/129a1f5ca1eaee0c952a5e7a07faae305c5e15bc\"\u003e\u003ccode\u003e129a1f5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3641\"\u003e#3641\u003c/a\u003e from pre-commit/mxr-patch-1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.5.1...v4.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygments` from 2.19.2 to 2.20.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygments/pygments/releases\"\u003epygments's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.20.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNew lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRell (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003earchetype: Fix catastrophic backtracking in GUID and ID patterns (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3064\"\u003e#3064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eASN.1: Recognize minus sign and fix range operator (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3014\"\u003e#3014\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3060\"\u003e#3060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eC++: Add C++26 keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e), add integer literal suffixes (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eComponentPascal: Fix \u003ccode\u003eanalyse_text\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3028\"\u003e#3028\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3032\"\u003e#3032\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCoq renamed to Rocq (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2883\"\u003e#2883\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2908\"\u003e#2908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCython: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2932\"\u003e#2932\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2933\"\u003e#2933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDebian control: Improve architecture parsing (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3052\"\u003e#3052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDevicetree: Add support for overlay/fragments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3021\"\u003e#3021\u003c/a\u003e), add bytestring support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3022\"\u003e#3022\u003c/a\u003e), fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3057\"\u003e#3057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFennel: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHaskell: Handle escape sequences in character literals (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3069\"\u003e#3069\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/1795\"\u003e#1795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eJava: Add module keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLean4: Add operators \u003ccode\u003e]'\u003c/code\u003e, \u003ccode\u003e]?\u003c/code\u003e, \u003ccode\u003e]!\u003c/code\u003e  (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2946\"\u003e#2946\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLESS: Support single-line comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3005\"\u003e#3005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLilyPond: Update to 2.25.29 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2974\"\u003e#2974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLLVM: Support C-style comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3023\"\u003e#3023\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2978\"\u003e#2978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLua(u): Fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3047\"\u003e#3047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMacaulay2: Update to 1.25.05 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2893\"\u003e#2893\u003c/a\u003e), 1.25.11 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2988\"\u003e#2988\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMathematica: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2957\"\u003e#2957\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emeson: Add additional operators (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMySQL: Update keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2970\"\u003e#2970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eorg-Mode: Support both schedule and deadline (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2899\"\u003e#2899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePHP: Add \u003ccode\u003e__PROPERTY__\u003c/code\u003e magic constant (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2924\"\u003e#2924\u003c/a\u003e), add reserved keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3002\"\u003e#3002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePostgreSQL: Add more keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eprotobuf: Fix namespace tokenization (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2929\"\u003e#2929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePython: Add \u003ccode\u003et\u003c/code\u003e-string support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2973\"\u003e#2973\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3009\"\u003e#3009\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3010\"\u003e#3010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTablegen: Fix infinite loop (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2972\"\u003e#2972\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTera Term macro: Add commands introduced in v5.3 through v5.6 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTOML: Support TOML 1.1.0 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3026\"\u003e#3026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTurtle: Allow empty comment lines (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2980\"\u003e#2980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eXML: Added \u003ccode\u003e.xbrl\u003c/code\u003e as file ending (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2890\"\u003e#2890\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2891\"\u003e#2891\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop Python 3.8, and add Python 3.14 as a supported version (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2987\"\u003e#2987\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eVarious improvements to \u003ccode\u003eautopygmentize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2894\"\u003e#2894\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eonedark\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2977\"\u003e#2977\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ertt\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2895\"\u003e#2895\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCache entry points to improve performance (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2979\"\u003e#2979\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003exterm-256\u003c/code\u003e color table (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3043\"\u003e#3043\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003ekwargs\u003c/code\u003e dictionary getting mutated on each call (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3044\"\u003e#3044\u003c/a\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygments/pygments/blob/master/CHANGES\"\u003epygments's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.20.0\u003c/h2\u003e\n\u003cp\u003e(released March 29th, 2026)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNew lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRell (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003earchetype: Fix catastrophic backtracking in GUID and ID patterns (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3064\"\u003e#3064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eASN.1: Recognize minus sign and fix range operator (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3014\"\u003e#3014\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3060\"\u003e#3060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eC++: Add C++26 keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e), add integer literal suffixes (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eComponentPascal: Fix \u003ccode\u003eanalyse_text\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3028\"\u003e#3028\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3032\"\u003e#3032\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCoq renamed to Rocq (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2883\"\u003e#2883\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2908\"\u003e#2908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCython: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2932\"\u003e#2932\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2933\"\u003e#2933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDebian control: Improve architecture parsing (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3052\"\u003e#3052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDevicetree: Add support for overlay/fragments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3021\"\u003e#3021\u003c/a\u003e), add bytestring support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3022\"\u003e#3022\u003c/a\u003e), fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3057\"\u003e#3057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFennel: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHaskell: Handle escape sequences in character literals (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3069\"\u003e#3069\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/1795\"\u003e#1795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eJava: Add module keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLean4: Add operators \u003ccode\u003e]'\u003c/code\u003e, \u003ccode\u003e]?\u003c/code\u003e, \u003ccode\u003e]!\u003c/code\u003e  (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2946\"\u003e#2946\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLESS: Support single-line comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3005\"\u003e#3005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLilyPond: Update to 2.25.29 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2974\"\u003e#2974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLLVM: Support C-style comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3023\"\u003e#3023\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2978\"\u003e#2978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLua(u): Fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3047\"\u003e#3047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMacaulay2: Update to 1.25.05 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2893\"\u003e#2893\u003c/a\u003e), 1.25.11 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2988\"\u003e#2988\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMathematica: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2957\"\u003e#2957\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emeson: Add additional operators (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMySQL: Update keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2970\"\u003e#2970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eorg-Mode: Support both schedule and deadline (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2899\"\u003e#2899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePHP: Add \u003ccode\u003e__PROPERTY__\u003c/code\u003e magic constant (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2924\"\u003e#2924\u003c/a\u003e), add reserved keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3002\"\u003e#3002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePostgreSQL: Add more keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eprotobuf: Fix namespace tokenization (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2929\"\u003e#2929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePython: Add \u003ccode\u003et\u003c/code\u003e-string support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2973\"\u003e#2973\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3009\"\u003e#3009\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3010\"\u003e#3010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTablegen: Fix infinite loop (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2972\"\u003e#2972\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTera Term macro: Add commands introduced in v5.3 through v5.6 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTOML: Support TOML 1.1.0 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3026\"\u003e#3026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTurtle: Allow empty comment lines (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2980\"\u003e#2980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eXML: Added \u003ccode\u003e.xbrl\u003c/code\u003e as file ending (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2890\"\u003e#2890\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2891\"\u003e#2891\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop Python 3.8, and add Python 3.14 as a supported version (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2987\"\u003e#2987\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eVarious improvements to \u003ccode\u003eautopygmentize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2894\"\u003e#2894\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eonedark\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2977\"\u003e#2977\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ertt\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2895\"\u003e#2895\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCache entry points to improve performance (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2979\"\u003e#2979\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003exterm-256\u003c/code\u003e color table (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3043\"\u003e#3043\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003ekwargs\u003c/code\u003e dictionary getting mutated on each call (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3044\"\u003e#3044\u003c/a\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/pygments/pygments/commit/708197d82827ba2d5ca78bcbb653c7102ce86dcd\"\u003e\u003ccode\u003e708197d\u003c/code\u003e\u003c/a\u003e Fix underline length.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/1d4538ae8621d766ecc91ff59caf76ab75983abc\"\u003e\u003ccode\u003e1d4538a\u003c/code\u003e\u003c/a\u003e Prepare 2.20 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/2ceaee4e634eebae2d10a47fd05406871f6bac8f\"\u003e\u003ccode\u003e2ceaee4\u003c/code\u003e\u003c/a\u003e Update CHANGES.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/e3a3c54b58c7f80bc4db887e471d4f91c77844ed\"\u003e\u003ccode\u003ee3a3c54\u003c/code\u003e\u003c/a\u003e Fix Haskell lexer: handle escape sequences in character literals (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3069\"\u003e#3069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/d7c3453e342dac319f58e4091f4ef183cc49d802\"\u003e\u003ccode\u003ed7c3453\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3071\"\u003e#3071\u003c/a\u003e from pygments/harden-html-formatter\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/0f97e7c37d44abfa4ddfddf44a3290fdad586034\"\u003e\u003ccode\u003e0f97e7c\u003c/code\u003e\u003c/a\u003e Harden the HTML formatter against CSS.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/9f981b2ba42b88ca5bdcebf12cd01efd7cd80aec\"\u003e\u003ccode\u003e9f981b2\u003c/code\u003e\u003c/a\u003e Update CHANGES.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/1d889151024e9a53f3702a60558b29b070306e9e\"\u003e\u003ccode\u003e1d88915\u003c/code\u003e\u003c/a\u003e Update CHANGES.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/c3d93adb9827fc054c3c12b47bde31c781a36a93\"\u003e\u003ccode\u003ec3d93ad\u003c/code\u003e\u003c/a\u003e Fix ASN.1 lexer: recognize minus sign a...\n\n_Description has been truncated_","html_url":"https://github.com/github/annotated-logger/pull/130","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/github%2Fannotated-logger/issues/130","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/130/packages"}},{"old_version":"2.0.7","new_version":"4.1.0","update_type":"major","path":"/backend","pr_created_at":"2026-04-25T20:13:48.000Z","version_change":"2.0.7 → 4.1.0","issue":{"uuid":"4329117144","node_id":"PR_kwDORlW1Vs7Vo6fD","number":67,"state":"closed","title":"Bump python-json-logger from 2.0.7 to 4.1.0 in /backend","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-04-25T20:27:41.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-25T20:13:48.000Z","updated_at":"2026-04-25T20:27:50.000Z","time_to_close":833,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"python-json-logger","old_version":"2.0.7","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps [python-json-logger](https://github.com/nhairs/python-json-logger) from 2.0.7 to 4.1.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/releases\"\u003epython-json-logger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.1.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.0.rc1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0.rc1\"\u003e4.0.0.rc1\u003c/a\u003e - 2025-09-07\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nhairs/python-json-logger/blob/main/docs/changelog.md\"\u003epython-json-logger's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v4.0.0...v4.1.0\"\u003e4.1.0\u003c/a\u003e - 2026-03-29\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14, PyPy 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8, 3.9 (includes PyPy versions).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.3.3...v4.0.0\"\u003e4.0.0\u003c/a\u003e - 2025-10-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003eDictConfigurator\u003c/code\u003e prefixes for \u003ccode\u003erename_fields\u003c/code\u003e and \u003ccode\u003estatic_fields\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/pull/45\"\u003e#45\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAllows using values like \u003ccode\u003eext://sys.stderr\u003c/code\u003e in \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e value fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupport comma seperated lists for Formatter \u003ccode\u003efmt\u003c/code\u003e (\u003ccode\u003estyle=\u0026quot;,\u0026quot;\u003c/code\u003e) e.g. \u003ccode\u003e\u0026quot;asctime,message,levelname\u0026quot;\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/15\"\u003e#15\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote that this style is specific to \u003ccode\u003epython-json-logger\u003c/code\u003e and thus care should be taken not to pass this format to other logging Formatter implementations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports sequences of strings (e.g. lists and tuples) of field names for Formatter \u003ccode\u003efmt\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/16\"\u003e#16\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRename \u003ccode\u003epythonjsonlogger.core.LogRecord\u003c/code\u003e and \u003ccode\u003elog_record\u003c/code\u003e arguments to avoid confusion / overlapping with \u003ccode\u003elogging.LogRecord\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/38\"\u003e#38\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects arguments to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e (and any child classes).\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eserialize_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eadd_fields\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonify_log_record\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eprocess_log_record\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNote: functions referring to \u003ccode\u003elog_record\u003c/code\u003e have \u003cstrong\u003enot\u003c/strong\u003e had their function name changed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for providing strings instead of objects when instantiating formatters. Instead use the \u003ccode\u003eDictConfigurator\u003c/code\u003e \u003ccode\u003eext://\u003c/code\u003e prefix format when using \u003ccode\u003efileConfig\u003c/code\u003e/\u003ccode\u003edictConfig\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/47\"\u003e#47\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.json.JsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e, \u003ccode\u003ejson_encoder\u003c/code\u003e, \u003ccode\u003ejson_serializer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.orjson.OrjsonFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAffects \u003ccode\u003epythonjsonlogger.msgspec.MsgspecFormatter\u003c/code\u003e: \u003ccode\u003ejson_default\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/rubensa\"\u003e\u003ccode\u003e@​rubensa\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0\"\u003e3.3.0\u003c/a\u003e - 2025-03-06\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eexc_info_as_array\u003c/code\u003e and \u003ccode\u003estack_info_as_array\u003c/code\u003e options are added to \u003ccode\u003epythonjsonlogger.core.BaseJsonFormatter\u003c/code\u003e allowing both to be encoded as list of lines instead of a single multi-line string. \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/35\"\u003e#35\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003emsgspec-python313-pre\u003c/code\u003e from \u003ccode\u003edev\u003c/code\u003e dependencies preventing potential RCE. Details: \u003ca href=\"https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307\"\u003eGHSA-wmxh-pxcx-9w24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/1hakusai1\"\u003e\u003ccode\u003e@​1hakusai1\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/omnigodz\"\u003e\u003ccode\u003e@​omnigodz\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v3.2.0...v3.2.1\"\u003e3.2.1\u003c/a\u003e - 2024-12-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImport error on \u003ccode\u003eimport pythonjsonlogger.jsonlogger\u003c/code\u003e \u003ca href=\"https://redirect.github.com/nhairs/python-json-logger/issues/29\"\u003e#29\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/nhairs/python-json-logger/commit/d80c68da770154d9662975b789cabcc9a3e99408\"\u003e\u003ccode\u003ed80c68d\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/b589b2a576ac058dc55be934159b67060a288756\"\u003e\u003ccode\u003eb589b2a\u003c/code\u003e\u003c/a\u003e [pyproject] Update license table to PEP 639 format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/2bb784a92250c60035a7e4536d1ef48cd02e50d5\"\u003e\u003ccode\u003e2bb784a\u003c/code\u003e\u003c/a\u003e Update code unlocked by Python 3.10 minimum version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/79599b5a6ad5e38c18c468fd0e4ac790961d6b5f\"\u003e\u003ccode\u003e79599b5\u003c/code\u003e\u003c/a\u003e Drop python 3.8, 3.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/622650c1f543e7909e8711e4a30c96cc2aa6e332\"\u003e\u003ccode\u003e622650c\u003c/code\u003e\u003c/a\u003e [docs.contributing] Update unsupported JSON encoders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/06165bb03f9892fc24762acabf6b1b0b35c6b56b\"\u003e\u003ccode\u003e06165bb\u003c/code\u003e\u003c/a\u003e [tests.test_formatters] Add non-printable bytes to test_common_types_encoded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/61f88a9fe7cee3409db9c589b03b15c2ffdc3ffa\"\u003e\u003ccode\u003e61f88a9\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify which packages have been considered and rejected\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/0add524a24c6210807a66e0f9149200b32cc98a9\"\u003e\u003ccode\u003e0add524\u003c/code\u003e\u003c/a\u003e [docs.contributing] Clarify when we will add support for new third-party pack...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/eee9505610a64276341a03f2a0b0dee5f500916b\"\u003e\u003ccode\u003eeee9505\u003c/code\u003e\u003c/a\u003e [pylint] Remove old command\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nhairs/python-json-logger/commit/804592648f8d0e56f7f41112d2945cf52d1d2a6b\"\u003e\u003ccode\u003e8045926\u003c/code\u003e\u003c/a\u003e [mypy] Don't ignore orjson\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nhairs/python-json-logger/compare/v2.0.7...v4.1.0\"\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=python-json-logger\u0026package-manager=pip\u0026previous-version=2.0.7\u0026new-version=4.1.0)](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/willmusolf/deepmove/pull/67","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/willmusolf%2Fdeepmove/issues/67","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/67/packages"}}]}