Skip to content

Fix free-threading crash from untraversed deferred references in suspended greenlets#511

Merged
jamadden merged 13 commits into
python-greenlet:masterfrom
kumaraditya303:ft-fix
Jun 16, 2026
Merged

Fix free-threading crash from untraversed deferred references in suspended greenlets#511
jamadden merged 13 commits into
python-greenlet:masterfrom
kumaraditya303:ft-fix

Conversation

@kumaraditya303

Copy link
Copy Markdown
Contributor

Hi — I'm a CPython core developer working on free-threading and maintainer of asyncio.

This PR fixes the crash on free-threading caused by deference reference counted objects not traversed by greenlet during GC traversal.

In free-threading, some of the refs to objects held by the interpreter uses a special reference type called "deferred reference". Such references are used on some objects like functions and classes to reduce reference contention on the objects and they must be traversed by the free-threaded GC so that it doesn't free these objects prematurely.
Greenlet currently crashes on free-threading because greenlets hold suspended frames which on free-threading can contain objects with deferred reference count. The suspended frames needs to be GC traversed so that the GC doesn't free objects early causing a crash at runtime exit.

In 3.15+, I exposed _PyGC_VisitStackRef and _PyGC_VisitFrameStack in python/cpython#150767 which is used in this PR so that suspended frames of greenlets can be traversed by the GC. This fixes the crash and as a side effect also fixes the "A Cycle Of Greenlets Is A Leak" because suspended frames are now traversed so they can now be collected by the GC instead of being leaked. I have added tests on 3.15+ to ensure that suspended frames are gc collected and finalizers of locals are triggered properly.

@kumaraditya303 kumaraditya303 changed the title fix crash on free-threading because of deferred reference counting Fix free-threading crash from untraversed deferred references in suspended greenlets Jun 4, 2026
@kumaraditya303

Copy link
Copy Markdown
Contributor Author

ping @jamadden for review. I will create a followup PR to fix some of the known memory leaks of greenlet but that depends on this PR.

@jamadden

Copy link
Copy Markdown
Contributor

Thanks for this! Today is the first time I've had a chance to look at it, and it LGTM. I can confirm it fixes the crashes on 3.15b2, both official from python.org and built locally (from MacPorts). I had a moment of panic due to a runtime linking error, but it turns out the needed symbol was only added in 3.15b2 and I was using 3.15b1.

I'm happy to merge this and add some appropriate notes to CHANGES.rst.

@jamadden jamadden merged commit f5a728e into python-greenlet:master Jun 16, 2026
39 checks passed
jamadden added a commit that referenced this pull request Jun 16, 2026
@kumaraditya303 kumaraditya303 deleted the ft-fix branch June 16, 2026 19:07
lthoangg pushed a commit to lthoangg/OpenAgentd that referenced this pull request Jun 22, 2026
Bumps the python-minor-patch group with 18 updates:

| Package | From | To |
| --- | --- | --- |
| [pydantic-settings](https://github.com/pydantic/pydantic-settings) |
`2.13.1` | `2.14.2` |
| [greenlet](https://github.com/python-greenlet/greenlet) | `3.4.0` |
`3.5.2` |
| [ddgs](https://github.com/deedy5/ddgs) | `9.13.0` | `9.14.4` |
| [fastapi](https://github.com/fastapi/fastapi) | `0.135.3` | `0.138.0`
|
| [uvicorn](https://github.com/Kludex/uvicorn) | `0.44.0` | `0.49.0` |
| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.3.4` |
`3.4.5` |
|
[opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python)
| `1.41.0` | `1.42.1` |
|
[opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python)
| `1.41.0` | `1.42.1` |
| [python-multipart](https://github.com/Kludex/python-multipart) |
`0.0.26` | `0.0.32` |
| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.27.0` |
`1.28.0` |
| [boto3](https://github.com/boto/boto3) | `1.43.0` | `1.43.34` |
| [duckdb](https://github.com/duckdb/duckdb-python) | `1.5.2` | `1.5.4`
|
| [pytest](https://github.com/pytest-dev/pytest) | `9.0.2` | `9.1.1` |
| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) |
`1.3.0` | `1.4.0` |
| [respx](https://github.com/lundberg/respx) | `0.22.0` | `0.23.1` |
| [ruff](https://github.com/astral-sh/ruff) | `0.15.8` | `0.15.18` |
| [tiktoken](https://github.com/openai/tiktoken) | `0.12.0` | `0.13.0` |
| [ty](https://github.com/astral-sh/ty) | `0.0.33` | `0.0.51` |

Updates `pydantic-settings` from 2.13.1 to 2.14.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pydantic/pydantic-settings/releases">pydantic-settings's
releases</a>.</em></p>
<blockquote>
<h2>v2.14.2</h2>
<h2>What's Changed</h2>
<p>This is a security patch release.</p>
<ul>
<li>Prevent <code>NestedSecretsSettingsSource</code> from following
symlinks outside <code>secrets_dir</code> by <a
href="https://github.com/hramezani"><code>@​hramezani</code></a> in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/889">pydantic/pydantic-settings#889</a></li>
<li>Prepare release 2.14.2 by <a
href="https://github.com/hramezani"><code>@​hramezani</code></a> in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/890">pydantic/pydantic-settings#890</a></li>
</ul>
<h3>Security</h3>
<p>Fixes <a
href="https://github.com/pydantic/pydantic-settings/security/advisories/GHSA-4xgf-cpjx-pc3j">GHSA-4xgf-cpjx-pc3j</a>:
<code>NestedSecretsSettingsSource</code> with
<code>secrets_nested_subdir=True</code> could follow a symbolic link
inside <code>secrets_dir</code> pointing outside it, reading out-of-tree
files into settings values and bypassing the
<code>secrets_dir_max_size</code> cap. Affected versions: <code>&gt;=
2.12.0, &lt; 2.14.2</code>.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/pydantic/pydantic-settings/compare/v2.14.1...v2.14.2">https://github.com/pydantic/pydantic-settings/compare/v2.14.1...v2.14.2</a></p>
<h2>v2.14.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Bump the python-packages group with 4 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/850">pydantic/pydantic-settings#850</a></li>
<li>Bump the python-packages group with 5 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/854">pydantic/pydantic-settings#854</a></li>
<li>Bump the github-actions group with 3 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/853">pydantic/pydantic-settings#853</a></li>
<li>Bump the python-packages group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/856">pydantic/pydantic-settings#856</a></li>
<li>Fix field named <code>cls</code> conflicting with classmethod
parameter by <a
href="https://github.com/hramezani"><code>@​hramezani</code></a> in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/858">pydantic/pydantic-settings#858</a></li>
<li>Prepare release 2.14.1 by <a
href="https://github.com/hramezani"><code>@​hramezani</code></a> in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/859">pydantic/pydantic-settings#859</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1">https://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1</a></p>
<h2>v2.14.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Fix parsing env vars into Optional Strict types by <a
href="https://github.com/hramezani"><code>@​hramezani</code></a> in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/792">pydantic/pydantic-settings#792</a></li>
<li>Fix RecursionError with mutually recursive models in CLI by <a
href="https://github.com/hramezani"><code>@​hramezani</code></a> in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/794">pydantic/pydantic-settings#794</a></li>
<li>Fix env_file from model_config ignored in CliApp.run() (<a
href="https://redirect.github.com/pydantic/pydantic-settings/issues/795">#795</a>)
by <a href="https://github.com/hramezani"><code>@​hramezani</code></a>
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/796">pydantic/pydantic-settings#796</a></li>
<li>Update dependencies by <a
href="https://github.com/hramezani"><code>@​hramezani</code></a> in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/798">pydantic/pydantic-settings#798</a></li>
<li>Add Dependabot configuration by <a
href="https://github.com/hramezani"><code>@​hramezani</code></a> in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/801">pydantic/pydantic-settings#801</a></li>
<li>Bump samuelcolvin/check-python-version from 4.1 to 5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/802">pydantic/pydantic-settings#802</a></li>
<li>Bump actions/upload-artifact from 4 to 7 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/803">pydantic/pydantic-settings#803</a></li>
<li>Bump actions/checkout from 4 to 6 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/804">pydantic/pydantic-settings#804</a></li>
<li>Bump astral-sh/setup-uv from 5 to 7 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/805">pydantic/pydantic-settings#805</a></li>
<li>Bump actions/setup-python from 5 to 6 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/806">pydantic/pydantic-settings#806</a></li>
<li>Ignore chardet and group GitHub Actions in Dependabot by <a
href="https://github.com/hramezani"><code>@​hramezani</code></a> in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/808">pydantic/pydantic-settings#808</a></li>
<li>Bump actions/download-artifact from 4 to 8 in the github-actions
group by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/809">pydantic/pydantic-settings#809</a></li>
<li>Bump the python-packages group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/810">pydantic/pydantic-settings#810</a></li>
<li>Support reading .env files from FIFOs (e.g. 1Password Environments)
by <a href="https://github.com/JacobHayes"><code>@​JacobHayes</code></a>
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/776">pydantic/pydantic-settings#776</a></li>
<li>Fix AliasChoices ignored when changing provider priority by <a
href="https://github.com/hramezani"><code>@​hramezani</code></a> in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/813">pydantic/pydantic-settings#813</a></li>
<li>fix: resolve KeyError in run_subcommand for underscore field names
by <a
href="https://github.com/bradykieffer"><code>@​bradykieffer</code></a>
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/799">pydantic/pydantic-settings#799</a></li>
<li>Bump the python-packages group with 3 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/814">pydantic/pydantic-settings#814</a></li>
<li>Fix <code>Literal[numeric Enum]</code> coercion for CLI and env vars
by <a href="https://github.com/m9810223"><code>@​m9810223</code></a> in
<a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/811">pydantic/pydantic-settings#811</a></li>
<li>Fix nested discriminated unions not discovered by env/CLI providers
by <a href="https://github.com/hramezani"><code>@​hramezani</code></a>
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/816">pydantic/pydantic-settings#816</a></li>
<li>Bump the python-packages group with 3 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/820">pydantic/pydantic-settings#820</a></li>
<li>CLI ensure env nested max split internally. by <a
href="https://github.com/kschwab"><code>@​kschwab</code></a> in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/821">pydantic/pydantic-settings#821</a></li>
<li>Bump the python-packages group with 4 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/pydantic/pydantic-settings/pull/824">pydantic/pydantic-settings#824</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pydantic/pydantic-settings/commit/d703bd717e5e07439fa89da2245eee6139413e9e"><code>d703bd7</code></a>
Prepare release 2.14.2 (<a
href="https://redirect.github.com/pydantic/pydantic-settings/issues/890">#890</a>)</li>
<li><a
href="https://github.com/pydantic/pydantic-settings/commit/e95c30bec8cfaee88ee275138c064aea97a25bdf"><code>e95c30b</code></a>
Prepare release 2.14.1 (<a
href="https://redirect.github.com/pydantic/pydantic-settings/issues/859">#859</a>)</li>
<li><a
href="https://github.com/pydantic/pydantic-settings/commit/0c8734581b6cf70a995afad603ac456631d00621"><code>0c87345</code></a>
Fix field named <code>cls</code> conflicting with classmethod parameter
(<a
href="https://redirect.github.com/pydantic/pydantic-settings/issues/858">#858</a>)</li>
<li><a
href="https://github.com/pydantic/pydantic-settings/commit/7bd0072795a800065b42210b6dca90fc9b83daf7"><code>7bd0072</code></a>
Bump the python-packages group with 2 updates (<a
href="https://redirect.github.com/pydantic/pydantic-settings/issues/856">#856</a>)</li>
<li><a
href="https://github.com/pydantic/pydantic-settings/commit/b03e573d017ed48e1c2774a5e0b715db9766c76b"><code>b03e573</code></a>
Bump the github-actions group with 3 updates (<a
href="https://redirect.github.com/pydantic/pydantic-settings/issues/853">#853</a>)</li>
<li><a
href="https://github.com/pydantic/pydantic-settings/commit/eaa3b434938411ec8a3717ea646614561e713f51"><code>eaa3b43</code></a>
Bump the python-packages group with 5 updates (<a
href="https://redirect.github.com/pydantic/pydantic-settings/issues/854">#854</a>)</li>
<li><a
href="https://github.com/pydantic/pydantic-settings/commit/9f95615c24c6813c1d7d203576581a79cb6d9e8e"><code>9f95615</code></a>
Bump the python-packages group with 4 updates (<a
href="https://redirect.github.com/pydantic/pydantic-settings/issues/850">#850</a>)</li>
<li><a
href="https://github.com/pydantic/pydantic-settings/commit/8916beeecc6d0510e3d0532a0ed839937400ddc3"><code>8916bee</code></a>
Prepare release 2.14.0 (<a
href="https://redirect.github.com/pydantic/pydantic-settings/issues/848">#848</a>)</li>
<li><a
href="https://github.com/pydantic/pydantic-settings/commit/39e551c0910c85505b608ff85a103b2c9f7396c5"><code>39e551c</code></a>
Fix CLI descriptions lost under <code>python -OO</code> by falling back
to `json_schema_...</li>
<li><a
href="https://github.com/pydantic/pydantic-settings/commit/9ed7f48ea2c90f436a03b01f721fe6656c869b14"><code>9ed7f48</code></a>
Bump the python-packages group with 4 updates (<a
href="https://redirect.github.com/pydantic/pydantic-settings/issues/847">#847</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `greenlet` from 3.4.0 to 3.5.2
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/python-greenlet/greenlet/blob/master/CHANGES.rst">greenlet's
changelog</a>.</em></p>
<blockquote>
<h1>3.5.2 (2026-06-17)</h1>
<ul>
<li>The minimum supported version of Python 3.15 is now 3.15b2.</li>
<li>Fix some garbage-collection related crashes on free-threaded Python
3.15. Thanks to Kumar Aditya in <code>PR
[#511](https://github.com/python-greenlet/greenlet/issues/511)
&lt;https://github.com/python-greenlet/greenlet/pull/511&gt;</code>_.</li>
<li>Improve garbage collection of greenlets. This mostly applies to
Python 3.15. Thanks to Kumar Aditya in <code>PR
[#512](https://github.com/python-greenlet/greenlet/issues/512)
&lt;https://github.com/python-greenlet/greenlet/pull/512&gt;</code>_.</li>
</ul>
<h1>3.5.1 (2026-05-20)</h1>
<ul>
<li>Add preliminary support for Python 3.15b1. This has not been
reviewed by CPython core developers, but all tests pass. Binary
wheels of this version won't work on earlier Python 3.15 builds and
may not work on later 3.15 builds.</li>
<li>Fix the discrepancy in the way the two <code>getcurrent</code> APIs
behave
during greenlet teardown. One API (the C API used by, e.g., gevent)
raised a
<code>RuntimeError</code>; the other (the Python
<code>greenlet.getcurrent</code> API)
returned <code>None</code>. This second way is incompatible with
greenlet's type
annotations, so <code>greenlet.getcurrent</code> now raises a
<code>RuntimeError</code> as well.</li>
</ul>
<h1>3.5.0 (2026-04-27)</h1>
<ul>
<li>
<p>Remove the <code>atexit</code> callback. This callback caused
greenlet APIs
to become unavailable far too soon during interpreter shutdown. Now
they remain available while all <code>atexit</code> callbacks run.
Sometime
after <code>Py_IsFinalizing</code> becomes true, they may begin
misbehaving.
Because the order in which C extensions are finalized is undefined,
C extensions that are sensitive to this need to check the results of
that function before invoking greenlet APIs. As a convenience,
<code>PyGreenlet_GetCurrent</code> sets an exception and returns
<code>NULL</code>
when this happens (and <code>greenlet.getcurrent</code> begins returning
<code>None</code>); other greenlet C API functions have undefined
behaviour.
Methods invoked directly on pre-existing <code>greenlet.greenlet</code>
objects will continue to function at least until the greenlet C
extension has been garbage collected and finalized.</p>
<p>See <code>PR 508
&lt;https://github.com/python-greenlet/greenlet/pull/508&gt;</code>_.</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/0b64e9c851ae7bd8fc9b73d98031168237ee71db"><code>0b64e9c</code></a>
Preparing release 3.5.2</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/3e28d276d01e74882f4cff1a4b54aed47153d617"><code>3e28d27</code></a>
Add change note for <a
href="https://redirect.github.com/python-greenlet/greenlet/issues/512">#512</a>
[skip ci]</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/6563c5e909a84c037c3d03e46851cd3016525a35"><code>6563c5e</code></a>
Merge pull request <a
href="https://redirect.github.com/python-greenlet/greenlet/issues/512">#512</a>
from kumaraditya303/ft-mem</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/ab6eff60766e8954d890eef064ee2e1dd7c8b262"><code>ab6eff6</code></a>
add ignore for win 3.10</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/41f5349a0f1b69ce180c90acb9a4cf2c84d612e7"><code>41f5349</code></a>
revert back to fails_leakcheck_on_py314_or_less</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/b0aac05734e9e41d4a592e0c913846990a9c7c24"><code>b0aac05</code></a>
set fail-fast=false and if condition correctly</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/2f87f316613d401bbf1b1653595654654e572550"><code>2f87f31</code></a>
rename to ignores_leakcheck_on_py314_or_less</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/28bbde3de939acefe8e9d72fb179115b81392a87"><code>28bbde3</code></a>
add comments</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/35206b8dc536cfe92c09509432b4a301b5fede5f"><code>35206b8</code></a>
fix test and restrict tp_is_gc &lt; 3.15</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/abdbab55b03334700fd264e523ac75926daba043"><code>abdbab5</code></a>
fix gil enabled</li>
<li>Additional commits viewable in <a
href="https://github.com/python-greenlet/greenlet/compare/3.4.0...3.5.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `ddgs` from 9.13.0 to 9.14.4
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/deedy5/ddgs/releases">ddgs's
releases</a>.</em></p>
<blockquote>
<h2>v9.14.4</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(engines): update DuckDuckgo by <a
href="https://github.com/deedy5"><code>@​deedy5</code></a> in <a
href="https://redirect.github.com/deedy5/ddgs/pull/465">deedy5/ddgs#465</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/deedy5/ddgs/compare/v9.14.3...v9.14.4">https://github.com/deedy5/ddgs/compare/v9.14.3...v9.14.4</a></p>
<h2>v9.14.3</h2>
<h2>What's Changed</h2>
<ul>
<li>feat(engines): add Startpage by <a
href="https://github.com/deedy5"><code>@​deedy5</code></a> in <a
href="https://redirect.github.com/deedy5/ddgs/pull/464">deedy5/ddgs#464</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/deedy5/ddgs/compare/v9.14.2...v9.14.3">https://github.com/deedy5/ddgs/compare/v9.14.2...v9.14.3</a></p>
<h2>v9.14.2</h2>
<h2>What's Changed</h2>
<ul>
<li>refactor(ddgs): improve engine selection and error handling by <a
href="https://github.com/deedy5"><code>@​deedy5</code></a> in <a
href="https://redirect.github.com/deedy5/ddgs/pull/456">deedy5/ddgs#456</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/deedy5/ddgs/compare/v9.14.1...v9.14.2">https://github.com/deedy5/ddgs/compare/v9.14.1...v9.14.2</a></p>
<h2>v9.14.1</h2>
<h2>What's Changed</h2>
<ul>
<li><a
href="https://github.com/deedy5/ddgs/commit/6e4a50706509c52e3d5da7d4870fbf82bc0a342e">fix(engines):
disable Google until fixed</a></li>
<li><a
href="https://github.com/deedy5/ddgs/commit/cb2abbb2006a30c67f5455ad9205306f7c571a7d">build(deps):
bump primp to 1.2.3</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/deedy5/ddgs/compare/v9.14.0...v9.14.1">https://github.com/deedy5/ddgs/compare/v9.14.0...v9.14.1</a></p>
<h2>v9.14.0</h2>
<h2>What's Changed</h2>
<ul>
<li>feat(dht): add beta p2p distributed cache network by <a
href="https://github.com/deedy5"><code>@​deedy5</code></a> in <a
href="https://redirect.github.com/deedy5/ddgs/pull/451">deedy5/ddgs#451</a></li>
</ul>
<h3>New Features</h3>
<ul>
<li>✅ DHT distributed peer-to-peer search result cache network
(beta)</li>
<li>Full libp2p Kademlia implementation</li>
<li>Automatic peer discovery and bootstrap network</li>
<li>Local cache with TTL eviction</li>
<li>REST API endpoints via <code>ddgs[api]</code> extra</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/deedy5/ddgs/compare/v9.13.1...v9.14.0">https://github.com/deedy5/ddgs/compare/v9.13.1...v9.14.0</a></p>
<h2>v9.13.1</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(cli): handle deprecated -k flag and add bing to images backends
by <a href="https://github.com/deedy5"><code>@​deedy5</code></a> in <a
href="https://redirect.github.com/deedy5/ddgs/pull/449">deedy5/ddgs#449</a></li>
<li>fix(base): remove per-element strip in extract_results by <a
href="https://github.com/deedy5"><code>@​deedy5</code></a> in <a
href="https://redirect.github.com/deedy5/ddgs/pull/450">deedy5/ddgs#450</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/deedy5/ddgs/compare/v9.13.0...v9.13.1">https://github.com/deedy5/ddgs/compare/v9.13.0...v9.13.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/deedy5/ddgs/commit/a4bf2f21827dc632296008068c5da00960f3cd05"><code>a4bf2f2</code></a>
chore(release): bump version to 9.14.4</li>
<li><a
href="https://github.com/deedy5/ddgs/commit/4b2afc4ac75985788c6b78a4c2fae831a872f105"><code>4b2afc4</code></a>
refactor(api_server): wrap fastapi_app import in try-except block</li>
<li><a
href="https://github.com/deedy5/ddgs/commit/21de33d67926d1db5e16d7c1ee179a36f9946a74"><code>21de33d</code></a>
fix(engines): update DuckDuckgo</li>
<li><a
href="https://github.com/deedy5/ddgs/commit/7347d5837b663824904725bf24a3b51d658bda50"><code>7347d58</code></a>
chore(release): bump version to 9.14.3</li>
<li><a
href="https://github.com/deedy5/ddgs/commit/97d993eb5c6b6b82e96e7e428ca1fd97c63259d1"><code>97d993e</code></a>
feat(engines): add Startpage</li>
<li><a
href="https://github.com/deedy5/ddgs/commit/ad0f617d9bfdd34510f2b36185610eee94f98f18"><code>ad0f617</code></a>
fix(engines): update Google useragents</li>
<li><a
href="https://github.com/deedy5/ddgs/commit/783308af96ed4c23dad4f21be7108f2ce48c4890"><code>783308a</code></a>
chore(release): bump version to 9.14.2</li>
<li><a
href="https://github.com/deedy5/ddgs/commit/9d21fffd77e28ceff19caa7ba57cbd9e426ef228"><code>9d21fff</code></a>
refactor(ddgs): improve engine selection and error handling</li>
<li><a
href="https://github.com/deedy5/ddgs/commit/d3194a3ab05454e354ac59c3d1ccc0189470e80a"><code>d3194a3</code></a>
chore(release): bump version to v9.14.1</li>
<li><a
href="https://github.com/deedy5/ddgs/commit/cb2abbb2006a30c67f5455ad9205306f7c571a7d"><code>cb2abbb</code></a>
build(deps): bump primp to 1.2.3</li>
<li>Additional commits viewable in <a
href="https://github.com/deedy5/ddgs/compare/v9.13.0...v9.14.4">compare
view</a></li>
</ul>
</details>
<br />

Updates `fastapi` from 0.135.3 to 0.138.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/fastapi/fastapi/releases">fastapi's
releases</a>.</em></p>
<blockquote>
<h2>0.138.0</h2>
<h3>Features</h3>
<ul>
<li>✨ Add support for <code>app.frontend(&quot;/&quot;,
directory=&quot;dist&quot;)</code> and
<code>router.frontend(&quot;/&quot;, directory=&quot;dist&quot;)</code>.
PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15800">#15800</a>
by <a href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.
<ul>
<li>Read the docs: <a
href="https://fastapi.tiangolo.com/tutorial/frontend/">Frontend</a>.</li>
</ul>
</li>
</ul>
<h3>Docs</h3>
<ul>
<li>📝 Fix typo in release notes. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15807">#15807</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>📝 Add <code>app.frontend()</code> instructions to Agent Library
Skill. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15805">#15805</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>📝 Update release notes link. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15802">#15802</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>✏️ Update white space characters in bigger apps. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15801">#15801</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>✏️ Fix grammar, typos, and broken links in docs. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15694">#15694</a>
by <a
href="https://github.com/YuriiMotov"><code>@​YuriiMotov</code></a>.</li>
</ul>
<h3>Translations</h3>
<ul>
<li>🌐 Enable Hindi docs translations. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15554">#15554</a>
by <a
href="https://github.com/YuriiMotov"><code>@​YuriiMotov</code></a>.</li>
</ul>
<h3>Internal</h3>
<ul>
<li>🐛 Fix failing test, update format for raised errors. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15804">#15804</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>👷 Fix test-alls-green. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15803">#15803</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🔧 Enable checking <code>release-notes.md</code> for typos. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15796">#15796</a>
by <a
href="https://github.com/YuriiMotov"><code>@​YuriiMotov</code></a>.</li>
<li>📝 Tweak wording about deploying to FastAPI Cloud. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15793">#15793</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🔨 Use <code>gpt-5.5</code> model in <code>translate.py</code>,
specify <code>-chat</code> to avoid warnings. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15792">#15792</a>
by <a
href="https://github.com/YuriiMotov"><code>@​YuriiMotov</code></a>.</li>
</ul>
<h2>0.137.2</h2>
<h3>Features</h3>
<ul>
<li>✨ Add <code>iter_route_contexts()</code> for advanced use cases that
used to use <code>router.routes</code> (e.g. Jupyverse). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15785">#15785</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
</ul>
<h3>Translations</h3>
<ul>
<li>🌐 Fix broken Markdown in Korean custom response docs. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15774">#15774</a>
by <a href="https://github.com/kooqooo"><code>@​kooqooo</code></a>.</li>
<li>🌐 Update translations for fr (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15761">#15761</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for zh-hant (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15760">#15760</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for de (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15759">#15759</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for ko (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15757">#15757</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for uk (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15756">#15756</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for zh (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15755">#15755</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for tr (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15754">#15754</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for pt (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15753">#15753</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for es (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15752">#15752</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for ja (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15751">#15751</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for ru (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15758">#15758</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
</ul>
<h3>Internal</h3>
<ul>
<li>🔧 Update sponsors: add BairesDev. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15787">#15787</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🔨 Update sponsors script to simplify previews. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15786">#15786</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/fastapi/fastapi/commit/4b83b0d409009c8de9df4070fe163838b1a700c7"><code>4b83b0d</code></a>
🔖 Release version 0.138.0 (<a
href="https://redirect.github.com/fastapi/fastapi/issues/15808">#15808</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/041cb0cdfa2d0f705d14ed07c2c2e0f92ef5f32c"><code>041cb0c</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/10393846ede7a2947cec594d15a43f813001cab4"><code>1039384</code></a>
📝 Fix typo in release notes (<a
href="https://redirect.github.com/fastapi/fastapi/issues/15807">#15807</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/0303491b69ff84a4632c0314e6db4df74f2f93f9"><code>0303491</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/190f6e2033c8b886b25027be284d8c8c1893f28c"><code>190f6e2</code></a>
📝 Add Frontend instructions to Agent Library Skill (<a
href="https://redirect.github.com/fastapi/fastapi/issues/15805">#15805</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/17945e5ab7f25234340c152a40d232a98857e079"><code>17945e5</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/2260afaf433103c8104b34d256cf0b96b058823b"><code>2260afa</code></a>
🐛 Fix failing test, update format for raised errors (<a
href="https://redirect.github.com/fastapi/fastapi/issues/15804">#15804</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/0cd5001d0ef80a07e2d775c5c75522391a3e06d7"><code>0cd5001</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/7cb1ab6264bc03319832f553730b511192a0c0d3"><code>7cb1ab6</code></a>
👷 Fix test-alls-green (<a
href="https://redirect.github.com/fastapi/fastapi/issues/15803">#15803</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/9c7eceb00ff6e1d37980954418f7c9dab30a4cd5"><code>9c7eceb</code></a>
📝 Update release notes</li>
<li>Additional commits viewable in <a
href="https://github.com/fastapi/fastapi/compare/0.135.3...0.138.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `uvicorn` from 0.44.0 to 0.49.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/Kludex/uvicorn/releases">uvicorn's
releases</a>.</em></p>
<blockquote>
<h2>Version 0.49.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Bump httptools minimum version to 0.8.0 by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2962">Kludex/uvicorn#2962</a></li>
<li>Consume duplicate forwarding headers in ProxyHeadersMiddleware
(reverses the 0.48.0 behavior of ignoring them) by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2971">Kludex/uvicorn#2971</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0">https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0</a></p>
<h2>Version 0.48.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Default <code>ssl_ciphers</code> to <code>None</code> and use
OpenSSL defaults by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2940">Kludex/uvicorn#2940</a></li>
<li>Ignore duplicate forwarding headers in
<code>ProxyHeadersMiddleware</code> by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2944">Kludex/uvicorn#2944</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0">https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0</a></p>
<h2>Version 0.47.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Eagerly import the ASGI app in the parent process by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2919">Kludex/uvicorn#2919</a></li>
<li>Add <code>ssl_context_factory</code> for custom
<code>SSLContext</code> configuration by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2920">Kludex/uvicorn#2920</a></li>
<li>Treat <code>fd=0</code> as a valid file descriptor with
reload/workers by <a
href="https://github.com/eltoder"><code>@​eltoder</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2927">Kludex/uvicorn#2927</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Kludex/uvicorn/compare/0.46.0...0.47.0">https://github.com/Kludex/uvicorn/compare/0.46.0...0.47.0</a></p>
<h2>Version 0.46.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Support <code>ws_max_size</code> in <code>wsproto</code>
implementation by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2915">Kludex/uvicorn#2915</a></li>
<li>Support <code>ws_ping_interval</code> and
<code>ws_ping_timeout</code> in <code>wsproto</code> implementation by
<a href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2916">Kludex/uvicorn#2916</a></li>
<li>Use <code>bytearray</code> for incoming WebSocket message buffer in
websockets-sansio by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2917">Kludex/uvicorn#2917</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0">https://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0</a></p>
<h2>Version 0.45.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Preserve forwarded client ports in proxy headers middleware by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2903">Kludex/uvicorn#2903</a></li>
<li>Accept <code>os.PathLike</code> for <code>log_config</code> by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2905">Kludex/uvicorn#2905</a></li>
<li>Accept <code>log_level</code> strings case-insensitively by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2907">Kludex/uvicorn#2907</a></li>
<li>Raise helpful <code>ImportError</code> when PyYAML is missing for
YAML log config by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2906">Kludex/uvicorn#2906</a></li>
<li>Revert empty context for ASGI runs by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2911">Kludex/uvicorn#2911</a></li>
<li>Add <code>--reset-contextvars</code> flag to isolate ASGI request
context by <a href="https://github.com/Kludex"><code>@​Kludex</code></a>
in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2912">Kludex/uvicorn#2912</a></li>
<li>Revert &quot;Emit <code>http.disconnect</code> on server shutdown
for streaming responses&quot; (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2829">#2829</a>)
by <a href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2913">Kludex/uvicorn#2913</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/Krishnachaitanyakc"><code>@​Krishnachaitanyakc</code></a>
made their first contribution in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2870">Kludex/uvicorn#2870</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0">https://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md">uvicorn's
changelog</a>.</em></p>
<blockquote>
<h2>0.49.0 (June 3, 2026)</h2>
<h3>Changed</h3>
<ul>
<li>Bump <code>httptools</code> minimum version to 0.8.0 (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2962">#2962</a>)</li>
<li>Consume duplicate forwarding headers in
<code>ProxyHeadersMiddleware</code> (reverses the 0.48.0 behavior of
ignoring them) (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2971">#2971</a>)</li>
</ul>
<h2>0.48.0 (May 24, 2026)</h2>
<h3>Changed</h3>
<ul>
<li>Default <code>ssl_ciphers</code> to <code>None</code> and use
OpenSSL defaults (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2940">#2940</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Ignore duplicate forwarding headers in
<code>ProxyHeadersMiddleware</code> (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2944">#2944</a>)</li>
</ul>
<h2>0.47.0 (May 14, 2026)</h2>
<h3>Added</h3>
<ul>
<li>Add <code>ssl_context_factory</code> for custom
<code>SSLContext</code> configuration (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2920">#2920</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Eagerly import the ASGI app in the parent process (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2919">#2919</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Treat <code>fd=0</code> as a valid file descriptor with
reload/workers (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2927">#2927</a>)</li>
</ul>
<h2>0.46.0 (April 23, 2026)</h2>
<h3>Added</h3>
<ul>
<li>Support <code>ws_max_size</code> in <code>wsproto</code>
implementation (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2915">#2915</a>)</li>
<li>Support <code>ws_ping_interval</code> and
<code>ws_ping_timeout</code> in <code>wsproto</code> implementation (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2916">#2916</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Use <code>bytearray</code> for incoming WebSocket message buffer in
<code>websockets-sansio</code> (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2917">#2917</a>)</li>
</ul>
<h2>0.45.0 (April 21, 2026)</h2>
<h3>Added</h3>
<ul>
<li>Add <code>--reset-contextvars</code> flag to isolate ASGI request
context (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2912">#2912</a>)</li>
<li>Accept <code>os.PathLike</code> for <code>log_config</code> (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2905">#2905</a>)</li>
<li>Accept <code>log_level</code> strings case-insensitively (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2907">#2907</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/Kludex/uvicorn/commit/3ef2e3e08e3d9ad9572800f8bc54f3eaed9eab0a"><code>3ef2e3e</code></a>
Version 0.49.0 (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2973">#2973</a>)</li>
<li><a
href="https://github.com/Kludex/uvicorn/commit/eeb64b1d1c95a14096ed3313377c74b485f558fc"><code>eeb64b1</code></a>
Consume duplicate forwarding headers in ProxyHeadersMiddleware (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2971">#2971</a>)</li>
<li><a
href="https://github.com/Kludex/uvicorn/commit/630f4aca14e79183617c71be714030842a1041c5"><code>630f4ac</code></a>
Make the watchfiles reload tests deterministic (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2972">#2972</a>)</li>
<li><a
href="https://github.com/Kludex/uvicorn/commit/9154922e3730f7aba68ecc3ecbf536680ee8fd1c"><code>9154922</code></a>
chore(deps): bump the github-actions group across 1 directory with 6
updates ...</li>
<li><a
href="https://github.com/Kludex/uvicorn/commit/739727a1d80e468d1e47e98bbd824ee9e3c9554b"><code>739727a</code></a>
Migrate docs deploy from Cloudflare Pages to Workers (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2967">#2967</a>)</li>
<li><a
href="https://github.com/Kludex/uvicorn/commit/be4a240488d3fb678a11b8e8f83505266f5f1de7"><code>be4a240</code></a>
Gate docs preview deploy on Cloudflare token presence (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2966">#2966</a>)</li>
<li><a
href="https://github.com/Kludex/uvicorn/commit/c489d7e10dfe653a2bba914feedf2a632a026e6f"><code>c489d7e</code></a>
Bump httptools minimum version to 0.8.0 (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2962">#2962</a>)</li>
<li><a
href="https://github.com/Kludex/uvicorn/commit/9f547bd82ef52bcba206e04170b359bd6daa25b3"><code>9f547bd</code></a>
Skip docs preview deploy for Dependabot PRs (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2961">#2961</a>)</li>
<li><a
href="https://github.com/Kludex/uvicorn/commit/44446b894e37ca76830d6aa83df4349795400ed4"><code>44446b8</code></a>
Migrate documentation from MkDocs Material to Zensical (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2959">#2959</a>)</li>
<li><a
href="https://github.com/Kludex/uvicorn/commit/cfd659c4f18b526adce9c255c96707bab20af40c"><code>cfd659c</code></a>
Bump pymdown-extensions to 10.21.3 (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2958">#2958</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/Kludex/uvicorn/compare/0.44.0...0.49.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `sse-starlette` from 3.3.4 to 3.4.5
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sysid/sse-starlette/releases">sse-starlette's
releases</a>.</em></p>
<blockquote>
<h2>v3.4.5</h2>
<h2>What's Changed</h2>
<ul>
<li>chore(deps): bump ujson from 5.12.0 to 5.12.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/187">sysid/sse-starlette#187</a></li>
<li>chore(deps): bump idna from 3.11 to 3.15 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/188">sysid/sse-starlette#188</a></li>
<li>chore(deps): bump actions/download-artifact from 4 to 8 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/190">sysid/sse-starlette#190</a></li>
<li>chore(deps): bump starlette from 0.50.0 to 1.0.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/193">sysid/sse-starlette#193</a></li>
<li>chore(deps): bump twisted from 25.5.0 to 26.4.0rc2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/194">sysid/sse-starlette#194</a></li>
<li>chore(deps): bump cryptography from 46.0.7 to 48.0.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/196">sysid/sse-starlette#196</a></li>
<li>chore(deps): bump msgpack from 1.1.2 to 1.2.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/197">sysid/sse-starlette#197</a></li>
<li>chore(deps): bump ujson from 5.12.1 to 5.13.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/198">sysid/sse-starlette#198</a></li>
<li>fix: test selection by <a
href="https://github.com/sysid"><code>@​sysid</code></a> in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/199">sysid/sse-starlette#199</a></li>
<li>chore(deps): bump starlette from 1.0.1 to 1.3.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/195">sysid/sse-starlette#195</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/sysid/sse-starlette/compare/v3.4.4...v3.4.5">https://github.com/sysid/sse-starlette/compare/v3.4.4...v3.4.5</a></p>
<h2>v3.4.4</h2>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/sysid/sse-starlette/compare/v3.4.3...v3.4.4">https://github.com/sysid/sse-starlette/compare/v3.4.3...v3.4.4</a></p>
<h2>v3.4.3</h2>
<h2>What's Changed</h2>
<ul>
<li>chore(deps): bump granian from 2.6.0 to 2.7.4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/185">sysid/sse-starlette#185</a></li>
<li>chore(deps): bump urllib3 from 2.6.3 to 2.7.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/186">sysid/sse-starlette#186</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/sysid/sse-starlette/compare/v3.4.2...v3.4.3">https://github.com/sysid/sse-starlette/compare/v3.4.2...v3.4.3</a></p>
<h2>v3.4.2</h2>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/sysid/sse-starlette/compare/v3.4.1...v3.4.2">https://github.com/sysid/sse-starlette/compare/v3.4.1...v3.4.2</a></p>
<h2>v3.4.1</h2>
<h2>What's Changed</h2>
<ul>
<li>chore(deps): bump cryptography from 46.0.6 to 46.0.7 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/181">sysid/sse-starlette#181</a></li>
<li>Chore/starlette sync by <a
href="https://github.com/sysid"><code>@​sysid</code></a> in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/184">sysid/sse-starlette#184</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/sysid/sse-starlette/compare/v3.3.4...v3.4.1">https://github.com/sysid/sse-starlette/compare/v3.3.4...v3.4.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/sysid/sse-starlette/commit/d45e48299bcaba9a7d17c5baa0ff4108cd534039"><code>d45e482</code></a>
Bump version to 3.4.5</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/32fbde5a758e63353d67ba3444f5587649a183f0"><code>32fbde5</code></a>
Merge pull request <a
href="https://redirect.github.com/sysid/sse-starlette/issues/195">#195</a>
from sysid/dependabot/uv/starlette-1.3.1</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/eba40087f468febb2816c088dc68584be35a48d2"><code>eba4008</code></a>
Merge pull request <a
href="https://redirect.github.com/sysid/sse-starlette/issues/199">#199</a>
from sysid/fix/test-selection</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/8685f2fa4255b6da9e49545bee02abb3f489f50e"><code>8685f2f</code></a>
fix: test selection</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/66c734a3e20af28e3e9af17e57eeed0aae34e5cd"><code>66c734a</code></a>
Merge pull request <a
href="https://redirect.github.com/sysid/sse-starlette/issues/198">#198</a>
from sysid/dependabot/uv/ujson-5.13.0</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/fb928d3801bee784cf642124c17f54949eea85e3"><code>fb928d3</code></a>
Merge pull request <a
href="https://redirect.github.com/sysid/sse-starlette/issues/197">#197</a>
from sysid/dependabot/uv/msgpack-1.2.1</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/cf620f4ca6663cbb5b074783fedf889b6a59c974"><code>cf620f4</code></a>
Merge pull request <a
href="https://redirect.github.com/sysid/sse-starlette/issues/196">#196</a>
from sysid/dependabot/uv/cryptography-48.0.1</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/4a7cd516efd1e7ef6343d5bca0ddb00d3f966ef2"><code>4a7cd51</code></a>
chore(deps): bump ujson from 5.12.1 to 5.13.0</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/6069864e99255a61f1edc2781e6b2a81b283fbbb"><code>6069864</code></a>
chore(deps): bump msgpack from 1.1.2 to 1.2.1</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/9485e2be2c13970a834aa73ba4ed0c8d792639b5"><code>9485e2b</code></a>
chore(deps): bump cryptography from 46.0.7 to 48.0.1</li>
<li>Additional commits viewable in <a
href="https://github.com/sysid/sse-starlette/compare/v3.3.4...v3.4.5">compare
view</a></li>
</ul>
</details>
<br />

Updates `opentelemetry-api` from 1.41.0 to 1.42.1
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md">opentelemetry-api's
changelog</a>.</em></p>
<blockquote>
<h2>Version 1.42.1/0.63b1 (2026-05-21)</h2>
<h3>Fixed</h3>
<ul>
<li>Preserve the random trace ID flag when creating child spans instead
of always
setting the random trace id bit depending on the available trace id
generator.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241">#5241</a>)</li>
</ul>
<h2>Version 1.42.0/0.63b0 (2026-05-19)</h2>
<h3>Added</h3>
<ul>
<li><code>opentelemetry-api</code>, <code>opentelemetry-sdk</code>: add
support for 'random-trace-id'
flags in W3C traceparent header trace flags. Implementations of
<code>IdGenerator</code>
that do randomly generate the 56 least significant bits, should also
implement a <code>is_trace_id_random</code> methods that returns
<code>True</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854">#4854</a>)</li>
<li>logs: add exception support to Logger emit and LogRecord attributes
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908">#4908</a>)</li>
<li><code>opentelemetry-exporter-otlp-proto-grpc</code>: make retryable
gRPC error codes
configurable for gRPC exporters
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917">#4917</a>)</li>
<li><code>opentelemetry-sdk</code>: Add
<code>create_logger_provider</code>/<code>configure_logger_provider</code>
to declarative file configuration, enabling LoggerProvider instantiation
from
config files without reading env vars
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990">#4990</a>)</li>
<li><code>opentelemetry-exporter-otlp-json-common</code>: add
'opentelemetry-exporter-otlp-json-common' package for OTLP JSON
exporters
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996">#4996</a>)</li>
<li><code>opentelemetry-sdk</code>: Add <code>service</code> resource
detector support to declarative
file configuration via
<code>detection_development.detectors[].service</code>
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003">#5003</a>)</li>
<li><code>opentelemetry-docker-tests</code>: add docker-tests coverage
of
<code>opentelemetry-exporter-otlp-proto-grpc</code> and
<code>opentelemetry-exporter-otlp-proto-http</code> metrics export
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030">#5030</a>)</li>
<li>Add <code>registry</code> keyword argument to
<code>PrometheusMetricReader</code> to allow passing
a custom Prometheus registry
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055">#5055</a>)</li>
<li>Add WeaverLiveCheck test util
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088">#5088</a>)</li>
<li><code>opentelemetry-sdk</code>: add <code>load_entry_point</code>
shared utility to declarative
file configuration for loading plugins via entry points; refactor
propagator
loading to use it
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093">#5093</a>)</li>
<li><code>opentelemetry-sdk</code>: add sampler plugin loading to
declarative file
configuration via the <code>opentelemetry_sampler</code> entry point
group, matching the
spec's PluginComponentProvider mechanism
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095">#5095</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12"><code>367e14d</code></a>
Prepare release 1.42.1/0.63b1 (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243">#5243</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc"><code>fd8e504</code></a>
Preserve random trace ID flag for child spans (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241">#5241</a>)
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242">#5242</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab"><code>013045e</code></a>
[release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225">#5225</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5"><code>1731583</code></a>
ci: Enable GitHub Merge Queue support (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209">#5209</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008"><code>7fab34d</code></a>
fix(config): allow deflate for OTLP HTTP exporters (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075">#5075</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa"><code>0b690d2</code></a>
ci: validate changelog fragment filenames (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212">#5212</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b"><code>d4fabb4</code></a>
feat(config): exporter plugin loading via entry points for declarative
config...</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012"><code>e19d346</code></a>
feat(config): generic resource detector plugin loading for declarative
config...</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57"><code>1d69bd2</code></a>
sdk/metrics: copy attributes dict to prevent post-recording mutation (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106">#5106</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15"><code>990a611</code></a>
feat(config): propagator plugin loading via entry points for declarative
conf...</li>
<li>Additional commits viewable in <a
href="https://github.com/open-telemetry/opentelemetry-python/compare/v1.41.0...v1.42.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `opentelemetry-sdk` from 1.41.0 to 1.42.1
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md">opentelemetry-sdk's
changelog</a>.</em></p>
<blockquote>
<h2>Version 1.42.1/0.63b1 (2026-05-21)</h2>
<h3>Fixed</h3>
<ul>
<li>Preserve the random trace ID flag when creating child spans instead
of always
setting the random trace id bit depending on the available trace id
generator.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241">#5241</a>)</li>
</ul>
<h2>Version 1.42.0/0.63b0 (2026-05-19)</h2>
<h3>Added</h3>
<ul>
<li><code>opentelemetry-api</code>, <code>opentelemetry-sdk</code>: add
support for 'random-trace-id'
flags in W3C traceparent header trace flags. Implementations of
<code>IdGenerator</code>
that do randomly generate the 56 least significant bits, should also
implement a <code>is_trace_id_random</code> methods that returns
<code>True</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854">#4854</a>)</li>
<li>logs: add exception support to Logger emit and LogRecord attributes
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908">#4908</a>)</li>
<li><code>opentelemetry-exporter-otlp-proto-grpc</code>: make retryable
gRPC error codes
configurable for gRPC exporters
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917">#4917</a>)</li>
<li><code>opentelemetry-sdk</code>: Add
<code>create_logger_provider</code>/<code>configure_logger_provider</code>
to declarative file configuration, enabling LoggerProvider instantiation
from
config files without reading env vars
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990">#4990</a>)</li>
<li><code>opentelemetry-exporter-otlp-json-common</code>: add
'opentelemetry-exporter-otlp-json-common' package for OTLP JSON
exporters
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996">#4996</a>)</li>
<li><code>opentelemetry-sdk</code>: Add <code>service</code> resource
detector support to declarative
file configuration via
<code>detection_development.detectors[].service</code>
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003">#5003</a>)</li>
<li><code>opentelemetry-docker-tests</code>: add docker-tests coverage
of
<code>opentelemetry-exporter-otlp-proto-grpc</code> and
<code>opentelemetry-exporter-otlp-proto-http</code> metrics export
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030">#5030</a>)</li>
<li>Add <code>registry</code> keyword argument to
<code>PrometheusMetricReader</code> to allow passing
a custom Prometheus registry
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055">#5055</a>)</li>
<li>Add WeaverLiveCheck test util
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088">#5088</a>)</li>
<li><code>opentelemetry-sdk</code>: add <code>load_entry_point</code>
shared utility to declarative
file configuration for loading plugins via entry points; refactor
propagator
loading to use it
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093">#5093</a>)</li>
<li><code>opentelemetry-sdk</code>: add sampler plugin loading to
declarative file
configuration via the <code>opentelemetry_sampler</code> entry point
group, matching the
spec's PluginComponentProvider mechanism
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095">#5095</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12"><code>367e14d</code></a>
Prepare release 1.42.1/0.63b1 (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243">#5243</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc"><code>fd8e504</code></a>
Preserve random trace ID flag for child spans (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241">#5241</a>)
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242">#5242</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab"><code>013045e</code></a>
[release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225">#5225</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5"><code>1731583</code></a>
ci: Enable GitHub Merge Queue support (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209">#5209</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008"><code>7fab34d</code></a>
fix(config): allow deflate for OTLP HTTP exporters (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075">#5075</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa"><code>0b690d2</code></a>
ci: validate changelog fragment filenames (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212">#5212</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b"><code>d4fabb4</code></a>
feat(config): exporter plugin loading via entry points for declarative
config...</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012"><code>e19d346</code></a>
feat(config): generic resource detector plugin loading for declarative
config...</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57"><code>1d69bd2</code></a>
sdk/metrics: copy attributes dict to prevent post-recording mutation (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106">#5106</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15"><code>990a611</code></a>
feat(config): propagator plugin loading via entry points for declarative
conf...</li>
<li>Additional commits viewable in <a
href="https://github.com/open-telemetry/opentelemetry-python/compare/v1.41.0...v1.42.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `python-multipart` from 0.0.26 to 0.0.32
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/Kludex/python-multipart/releases">python-multipart's
releases</a>.</em></p>
<blockquote>
<h2>Version 0.0.32</h2>
<h2>What's Changed</h2>
<ul>
<li>Replace per-byte partial-boundary scan with rfind lookbehind by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/python-multipart/pull/300">Kludex/python-multipart#300</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32">https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32</a></p>
<h2>Version 0.0.31</h2>
<h2>What's Changed</h2>
<ul>
<li>Speed up multipart header parsing and callback dispatch by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/python-multipart/pull/295">Kludex/python-multipart#295</a></li>
<li>Bound header field name size before validating by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/python-multipart/pull/296">Kludex/python-multipart#296</a></li>
<li>Validate Content-Length is non-negative in parse_form by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/python-multipart/pull/297">Kludex/python-multipart#297</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31">https://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31</a></p>
<h2>Version 0.0.30</h2>
<h2>What's Changed</h2>
<ul>
<li>Treat only <code>&amp;</code> as the urlencoded field separator by
<a href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/python-multipart/pull/290">Kludex/python-multipart#290</a></li>
<li>Ignore RFC 2231 extended parameters in
<code>pa…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants